99

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

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

在我看来,使用mvn deploy会带来额外的配置麻烦,但我在某处读到,由于与 maven 的内部工作相关的某种原因,将文件安装到共享存储库中是一个坏主意。

deploy更新:我得到和之间的功能差异install;实际上,我对在 maven 存储库中创建的文件方面的低级细节更感兴趣。

4

3 回答 3

179

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

例子:

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

  2. 当需要部署快照或发布时,我将运行“mvn deploy”。运行它会尝试将文件部署到远程存储库或服务器。通常我会部署到存储库管理器,例如Nexus

确实,运行“部署”需要一些额外的配置,你必须在你的 POM 中提供一个 distributionManagement 部分。

于 2009-03-29T05:41:32.703 回答
19

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

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

也许在 CI 服务器的“安装”将其安装到它的本地存储库中存在一些混淆,然后您作为用户正在共享?

于 2008-10-16T16:05:17.097 回答
5

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

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

在您的情况下,似乎“安装”用于简化部署的管理,因为 CI 的本地存储库共享存储库。如果 CI 在另一个盒子上,它必须使用“部署”目标。

于 2008-10-16T20:34:42.043 回答