ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

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


T
Tim O'Brien

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

例子:

当我在我的机器上运行一个大型的多模块项目时,我通常会运行“mvn install”。这将在我的本地存储库中安装所有生成的二进制软件工件(通常是 JAR)。然后,当我在构建中构建单个模块时,Maven 将从本地存储库中检索依赖项。当需要部署快照或发布时,我将运行“mvn deploy”。运行它会尝试将文件部署到远程存储库或服务器。通常我会部署到存储库管理器,例如 Nexus

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


@Tim 那么 mvn deploy 的优势到底是什么?对于最初需要的额外配置,它有什么好处?
Deploy 旨在将工件部署到远程服务器。这是与安装完全不同的用例。
m
matt b

From the Maven docs,听起来这只是您将软件包安装到的哪个存储库的不同:

install - 将包安装到本地存储库中,作为本地其他项目的依赖项

部署 - 在集成或发布环境中完成,将最终包复制到远程存储库以与其他开发人员和项目共享。

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


S
Spencer Kormos

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

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

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