“mvn deploy”到本地仓库和“mvn install”有什么区别?

我的团队使用从Apache开发服务器共享的内部团队maven repo。 我们也在同一台机器上运行Continuum CI服务器。 “Continuum”中的Maven构build与“安装”目标一起运行,它将最终的工件直接复制到共享目录中。

问题是,使用mvn install和使用部署目标(mvn-deploy插件)将文件添加到共享库中有什么区别?

在我看来,使用mvn部署创build额外的configuration麻烦,但我已经读过的地方,将文件安装到共享的回购是一个坏主意,由于某些原因与内部运作的maven。

更新:我得到部署和安装之间的function差异; 实际上,我更感兴趣的是在maven回购中创build的文件的底层细节。

肯,好问题。 我应该在“权威指南”中更加明确的区别。 “安装”和“部署”在构build中有两个不同的用途。 “安装”是指在本地存储库中安装工件的过程。 “部署”是指将工件部署到远程存储库的过程。

例:

  1. 当我在我的机器上运行一个大的多模块项目时,我通常会运行“mvn install”。 这将在我的本地存储库中安装所有生成的二进制软件工件(通常是JAR)。 然后,当我在构build中构build单独的模块时,Maven将从本地存储库中检索依赖项。

  2. 当需要部署快照或发布时,我将运行“mvn deploy”。 运行这将试图将文件部署到远程存储库或服务器。 通常,我将要部署到像Nexus这样的资源库pipe理器

确实,运行“部署”将需要一些额外的configuration,您将不得不在POM中提供一个distributionManagement部分。

从Maven文档中 ,听起来像只是将软件包安装到哪个存储库中的区别:

  • 安装 – 将软件包安装到本地存储库中,作为本地其他项目的依赖项
  • 部署 – 在集成或发行版环境中完成,将最终包复制到远程存储库,以便与其他开发人员和项目共享。

也许有一些困惑,在“安装”CI服务器安装到它的本地存储库,然后你作为一个用户共享?

“matt b”是正确的,但具体而言,“安装”目标将您构build的目标复制到文件系统上的本地存储库; 对于目前不适合整个团队的项目的小改动很有用。

“部署”目标将其上传到您的共享存储库,以便在您的工作完成时,然后由其他需要其项目的人员共享。

在你的情况下,由于CI的本地回购共享的回购,所以似乎使用“安装”来使得部署的pipe理更容易。 如果CI在另一个盒子上,则必须使用“部署”目标。