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(使用前将#替换为@)