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

时间:2009-10-09 15:49:39

标签: maven-2 lifecycle

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

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

1 个答案:

答案 0 :(得分:27)

Build Lifecycle Basics中所述:

  

构建生命周期由阶段构成

     

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

     

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

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

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

     

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

mvn deploy
     

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

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