26

注意:这个问题最初是由Lahiru Gunathilake作为另一个问题的答案发布的。为了清楚起见,我将它作为一个单独的问题移到这里。

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

4

1 回答 1

32

构建生命周期基础中所述:

构建生命周期由阶段组成

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

例如,默认生命周期具有以下构建阶段(有关构建阶段的完整列表,请参阅生命周期参考):

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

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

要完成所有这些,您只需要调用要执行的最后一个构建阶段,在这种情况下,部署:

mvn deploy

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

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

于 2009-10-09T15:50:41.820 回答