如果我运行mvn deploy它是否会构建新的工件,或者它只是将已经存在的工件部署到远程服务器中?

Pas*_*ent 23 lifecycle maven-2

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

当我们进行发布时,我们只需构建本地计算机并执行QA,然后将其托管到存储库中.如果我们运行mvn deploy它会创建新的工件,这会导致在存储库和二进制分发中具有不同的工件,因为我们正在从本地存储库创建二进制分发.但如果有人获得源代码并进行构建,他们将获得另一个.但如果mvn deploy不构建但只是部署它没关系.

Pas*_*ent 28

正如构建生命周期基础知识中所述:

构建生命周期由阶段组成

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

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

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

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

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

mvn deploy
Run Code Online (Sandbox Code Playgroud)

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

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