注意:此问题最初由Lahiru Gunathilake作为answer发布给另一个question。为了清楚起见,我将它作为一个单独的问题移到这里。
当我们进行发布时,我们只需构建本地计算机并执行QA,然后将其托管到存储库中。如果我们运行mvn deploy
它会创建新的工件,这会导致在存储库和二进制分发中具有不同的工件,因为我们正在从本地存储库创建二进制分发。但如果有人获得源代码并进行构建,他们将获得另一个。但是如果mvn deploy
没有构建但只是部署它就没问题。
答案 0 :(得分:27)
构建生命周期由阶段构成
每个构建生命周期都由不同的构建阶段列表定义,其中构建阶段代表生命周期中的一个阶段。
例如,默认生命周期具有以下构建阶段(有关构建阶段的完整列表,请参阅Lifecycle Reference):
validate
- 验证项目是否正确并提供所有必要信息compile
- 编译项目的源代码test
- 使用合适的单元测试框架测试编译的源代码。这些测试不应要求打包或部署代码package
- 获取已编译的代码并将其打包为可分发的格式,例如JAR。integration-test
- 如有必要,将程序包处理并部署到可以运行集成测试的环境中verify
- 运行任何检查以验证包是否有效并符合质量标准install
- 将软件包安装到本地存储库中,以用作本地其他项目的依赖项deploy
- 在集成或发布环境中完成,将最终包复制到远程存储库,以便与其他开发人员和项目共享。这些构建阶段(以及此处未显示的其他构建阶段)按顺序执行以完成默认生命周期。鉴于上面的构建阶段,这意味着当使用默认生命周期时,Maven将首先验证项目,然后将尝试编译源代码,针对测试运行这些源代码,打包二进制文件(例如jar),针对该代码运行集成测试包,验证包,将验证的包安装到本地存储库,然后在指定的环境中部署已安装的包。
要完成所有这些操作,您只需要调用要执行的最后一个构建阶段,在本例中为deploy:
mvn deploy
这是因为如果你调用构建阶段,它不仅会执行构建阶段,还会执行被调用构建阶段之前的每个构建阶段。
所以,答案是肯定的,mvn deploy
将执行install
并构建项目工件。但如果你不改变任何东西,这将产生完全相同的神器。