如果我运行 mvn deploy ,它会构建新的工件还是只是将现有的工件部署到远程服务器?

2024-03-04

Note:这个问题最初是由拉希鲁·古纳提拉克 https://stackoverflow.com/users/187248/lahiru-gunathilake as an answer https://stackoverflow.com/questions/207281/what-is-the-difference-between-mvn-deploy-to-a-local-repo-and-mvn-install/1544396#1544396到另一个question https://stackoverflow.com/questions/207281/what-is-the-difference-between-mvn-deploy-to-a-local-repo-and-mvn-install。为了清楚起见,我将其作为一个单独的问题移到此处。

当我们进行发布时,我们只需在本地计算机中构建并进行质量检查,然后将其托管到存储库中。如果我们跑mvn deploy它是否会创建新的工件,这会导致存储库和二进制发行版中具有不同的工件,因为我们正在从本地存储库创建二进制发行版。但如果有人获得源代码并进行构建,他们将得到不同的代码。但如果mvn deploy不构建,只部署就可以了。


正如中所解释的构建生命周期基础知识 http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Build_Lifecycle_Basics:

构建生命周期由阶段组成

这些构建生命周期中的每一个都由不同的构建阶段列表来定义,其中构建阶段表示生命周期中的一个阶段。

例如,默认生命周期具有以下构建阶段(有关构建阶段的完整列表,请参阅生命周期参考 http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference):

  • validate- 验证项目是否正确并且所有必要的信息均可用
  • compile- 编译项目的源代码
  • test- 使用合适的单元测试框架测试编译的源代码。这些测试不应要求打包或部署代码
  • package- 获取编译后的代码并将其打包为其可分发的格式,例如 JAR。
  • integration-test- 如有必要,处理包并将其部署到可以运行集成测试的环境中
  • verify- 进行任何检查以验证包裹是否有效并符合质量标准
  • install- 将包安装到本地存储库中,以用作本地其他项目的依赖项
  • deploy- 在集成或发布环境中完成,将最终包复制到远程存储库,以便与其他开发人员和项目共享。

这些构建阶段(加上此处未显示的其他构建阶段)按顺序执行以完成默认生命周期。考虑到上面的构建阶段,这意味着当使用默认生命周期时,Maven 将首先验证项目,然后尝试编译源代码,针对测试运行这些源代码,打包二进制文件(例如 jar),针对该项目运行集成测试打包,验证包,将验证后的包安装到本地仓库,然后将安装的包部署到指定的环境中。

要完成所有这些,您只需要调用要执行的最后一个构建阶段,在本例中为部署:

mvn deploy

这是因为,如果您调用构建阶段,它不仅会执行该构建阶段,还会执行被调用构建阶段之前的每个构建阶段。

所以,答案是肯定的,mvn deploy将执行install并构建项目工件。但如果你不改变任何东西,这将产生完全相同的工件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果我运行 mvn deploy ,它会构建新的工件还是只是将现有的工件部署到远程服务器? 的相关文章

随机推荐