我的团队使用从使用 Apache 的开发服务器共享的内部团队 maven 存储库。我们还在同一台机器上运行 Continuum CI 服务器。 Continuum 中的 Maven 构建以“安装”目标运行,它将最终工件直接复制到共享目录中。
问题是,使用 mvn install
将文件添加到共享存储库和使用部署目标(mvn-deploy 插件)有什么区别?
在我看来,使用 mvn deploy
会带来额外的配置麻烦,但我在某处读到由于与 maven 的内部工作相关的某种原因,将文件安装到共享存储库中是一个坏主意。
更新:我得到了 deploy
和 install
之间的功能差异;实际上,我对在 maven 存储库中创建的文件方面的低级细节更感兴趣。
肯,好问题。我应该在 The Definitive Guide 中更明确地说明差异。 “安装”和“部署”在构建中有两个不同的目的。 “安装”是指在本地存储库中安装工件的过程。 “部署”是指将工件部署到远程存储库的过程。
例子:
当我在我的机器上运行一个大型的多模块项目时,我通常会运行“mvn install”。这将在我的本地存储库中安装所有生成的二进制软件工件(通常是 JAR)。然后,当我在构建中构建单个模块时,Maven 将从本地存储库中检索依赖项。当需要部署快照或发布时,我将运行“mvn deploy”。运行它会尝试将文件部署到远程存储库或服务器。通常我会部署到存储库管理器,例如 Nexus
确实,运行“部署”需要一些额外的配置,你必须在你的 POM 中提供一个 distributionManagement 部分。
From the Maven docs,听起来这只是您将软件包安装到的哪个存储库的不同:
install - 将包安装到本地存储库中,作为本地其他项目的依赖项
部署 - 在集成或发布环境中完成,将最终包复制到远程存储库以与其他开发人员和项目共享。
也许在 CI 服务器的“安装”将其安装到它的本地存储库中存在一些混淆,然后您作为用户正在共享?
“matt b” 是对的,但具体来说,“安装”目标将您构建的目标复制到文件系统上的本地存储库;对于目前不适合整个团队的项目间的小改动很有用。
“部署”目标将其上传到您的共享存储库以供您完成工作时使用,然后可以由项目需要它的其他人共享。
在您的情况下,似乎“安装”用于简化部署的管理,因为 CI 的本地存储库是共享存储库。如果 CI 在另一个盒子上,它必须使用“部署”目标。
不定期副业成功案例分享
mvn deploy
的优势到底是什么?对于最初需要的额外配置,它有什么好处?