“将mvn部署”到本地仓库和“ mvn安装”之间有什么区别?


95

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

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

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

更新:我得到了deploy和之间的功能差异install。实际上,对于在Maven存储库中创建哪些文件的底层细节,我更感兴趣。

Answers:


166

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

例:

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

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

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


@Tim的优点是mvn deploy什么?对于最初需要的额外配置有什么好处?
极客

4
部署旨在将工件部署到远程服务器。这是与安装完全不同的用例。
Tim O'Brien 2014年

17

在Maven文档中,听起来好像只是将软件包安装到哪个存储库中不同:

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

CI服务器上的“安装”会将其安装到本地存储库中,可能会引起一些混淆,然后您作为用户共享这些存储库?


4

“ matt b”是正确的,但具体来说,“ install”目标会将您构建的目标复制到文件系统上的本地存储库中;对于当前不适用于整个团队的项目中的小更改有用。

“部署”目标将其上载到您的共享存储库中,以供您完成工作时使用,然后可以由对其项目需要它的其他人共享。

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.