位置:首页 > Java > Maven 构建生命周期详解

Maven 构建生命周期详解

时间:2026-08-13  |  作者:冻月看渠  |  阅读:0

Ma ven 构建生命周期定义了一个项目构建跟发布的过程,包含三个标准生命周期:

  • clean:清理项目
  • default(或 build):核心构建流程
  • site:生成项目文档

Maven 构建生命周期详解_wishdown.com

每个生命周期由多个阶段(phase)组成,执行时按顺序运行。

1、clean 生命周期

clean 生命周期负责清理项目的临时文件和目录(主要是target/),包含以下主要阶段:

阶段说明自动绑定的插件目标
pre-clean清理前的准备工作无默认绑定
clean删除target/目录ma ven-clean-plugin:clean
post-clean清理后的收尾工作无默认绑定

常用命令:

mvn clean      # 执行clean阶段(包含pre-clean和clean)

2、default 生命周期

default 生命周期是 Ma ven 最主要的生命周期,包含项目构建和部署的所有核心步骤。

一个典型的 Ma ven 构建(build)生命周期是由以下几个阶段的序列组成的:

Maven 构建生命周期详解_wishdown.com

阶段 处理 描述
验证 validate 验证项目 验证项目是否正确且所有必须信息是可用的
编译 compile 执行编译 源代码编译在此阶段完成
测试 Test 测试 使用适当的单元测试框架(例如JUnit)运行测试。
包装 package 打包 将编译后的代码打包成可分发的格式,例如 JAR 或 WAR
检查 verify 检查 对集成测试的结果进行检查,以保证质量达标
安装 install 安装 安装打包的项目到本地仓库,以供其他项目使用
部署 deploy 部署 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

为了完成 default 生命周期,这些阶段(包括其他未在上面罗列的生命周期阶段)将被按顺序地执行。

阶段依赖关系:

Maven 构建生命周期详解_wishdown.com

常用命令:

mvn compile     # 编译主代码
mvn test        # 运行测试
mvn package     # 打包(生成target/*.jar)
mvn install     # 安装到本地仓库(~/.m2/repository)
mvn deploy      # 部署到远程仓库(需配置distributionManagement)

3、site 生命周期

site 生命周期用于生成项目站点文档:

阶段说明自动绑定的插件目标
pre-site生成站点前的准备无默认绑定
site生成项目站点文档ma ven-site-plugin:site
post-site站点生成后的收尾无默认绑定
site-deploy部署站点到服务器ma ven-site-plugin:deploy

常用命令:

mvn site        # 生成站点(输出在target/site/)
mvn site-deploy # 部署站点(需配置site URL)

生命周期小结

Ma ven 有以下三个标准的生命周期:

1、Clean 生命周期:

  • clean:删除目标目录中的编译输出文件。这通常是在构建之前执行的,以确保项目从一个干净的状态开始。

2、Default 生命周期(也称为 Build 生命周期):

  • validate:验证项目的正确性,例如检查项目的版本是否正确。
  • compile:编译项目的源代码。
  • test:运行项目的单元测试。
  • package:将编译后的代码打包成可分发的格式,例如 JAR 或 WAR。
  • verify:对项目进行额外的检查以确保质量。
  • install:将项目的构建结果安装到本地 Ma ven 仓库中,以供其他项目使用。
  • deploy:将项目的构建结果复制到远程仓库,以供其他开发人员或团队使用。

3、Site 生命周期:

  • site:生成项目文档和站点信息。
  • deploy-site:将生成的站点信息发布到远程服务器,以便共享项目文档。

构建阶段由插件目标构成

一个插件目标代表一个特定的任务(比构建阶段更为精细),这有助于项目的构建和管理。这些目标可能被绑定到多个阶段或者无绑定。不绑定到任何构建阶段的目标可以在构建生命周期之外通过直接调用执行。这些目标的执行顺序取决于调用目标和构建阶段的顺序。

例如,考虑下面的命令:

clean 和 pakage 是构建阶段,dependency:copy-dependencies 是目标

mvn clean dependency:copy-dependencies package

这里的 clean 阶段将会被首先执行,然后 dependency:copy-dependencies 目标会被执行,最终 package 阶段被执行。

1、Clean 生命周期

当我们执行 mvn post-clean 命令时,Ma ven 调用 clean 生命周期,它包含以下阶段:

  • pre-clean:执行一些需要在clean之前完成的工作
  • clean:移除所有上一次构建生成的文件
  • post-clean:执行一些需要在clean之后立刻完成的工作

mvn clean 中的 clean 就是上面的 clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,如果执行 mvn clean 将运行以下两个生命周期阶段:

pre-clean, clean

如果我们运行 mvn post-clean ,则运行以下三个生命周期阶段:

pre-clean, clean, post-clean

我们可以通过在上面的 clean 生命周期的任何阶段定义目标来修改这部分的操作行为。

在下面的例子中,我们将 ma ven-antrun-plugin:run 目标添加到 pre-clean、clean 和 post-clean 阶段中。这样我们可以在 clean 生命周期的各个阶段显示文本信息。

我们已经在 C:MVNproject 目录下创建了一个 pom.xml 文件。


4.0.0
com.companyname.projectgroup
project
1.0


   
   org.apache.ma ven.plugins
   ma ven-antrun-plugin
   1.1
   
      
         id.pre-clean
         pre-clean
         
            run
         
         
            
               pre-clean phase
            
         
      
      
         id.clean
         clean
         
          run
         
         
            
               clean phase
            
         
      
      
         id.post-clean
         post-clean
         
            run
         
         
            
               post-clean phase
            
         
      
   
   


现在打开命令控制台,跳转到 pom.xml 所在目录,并执行下面的 mvn 命令。

C:MVNproject>mvn post-clean

Ma ven 将会开始处理并显示 clean 生命周期的所有阶段。

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] Executing tasks
     [echo] pre-clean phase
[INFO] Executed tasks
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
     [echo] clean phase
[INFO] Executed tasks
[INFO] [antrun:run {execution: id.post-clean}]
[INFO] Executing tasks
     [echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------

你可以尝试修改 mvn clean 命令,来显示 pre-clean 和 clean,而在 post-clean 阶段不执行任何操作。

2、Default (Build) 生命周期

这是 Ma ven 的主要生命周期,被用于构建应用,包括下面的 23 个阶段:

生命周期阶段 描述
validate(校验) 校验项目是否正确并且所有必要的信息可以完成项目的构建过程。
initialize(初始化) 初始化构建状态,比如设置属性值。
generate-sources(生成源代码) 生成包含在编译阶段中的任何源代码。
process-sources(处理源代码) 处理源代码,比如说,过滤任意值。
generate-resources(生成资源文件) 生成将会包含在项目包中的资源文件。
process-resources (处理资源文件) 复制和处理资源到目标目录,为打包阶段最好准备。
compile(编译) 编译项目的源代码。
process-classes(处理类文件) 处理编译生成的文件,比如说对Ja va class文件做字节码改善优化。
generate-test-sources(生成测试源代码) 生成包含在编译阶段中的任何测试源代码。
process-test-sources(处理测试源代码) 处理测试源代码,比如说,过滤任意值。
generate-test-resources(生成测试资源文件) 为测试创建资源文件。
process-test-resources(处理测试资源文件) 复制和处理测试资源到目标目录。
test-compile(编译测试源码) 编译测试源代码到测试目标目录.
process-test-classes(处理测试类文件) 处理测试源码编译生成的文件。
test(测试) 使用合适的单元测试框架运行测试(Juint是其中之一)。
prepare-package(准备打包) 在实际打包之前,执行任何的必要的操作为打包做准备。
package(打包) 将编译后的代码打包成可分发格式的文件,比如JAR、WAR或者EAR文件。
pre-integration-test(集成测试前) 在执行集成测试前进行必要的动作。比如说,搭建需要的环境。
integration-test(集成测试) 处理和部署项目到可以运行集成测试环境中。
post-integration-test(集成测试后) 在执行集成测试完成后进行必要的动作。比如说,清理集成测试环境。
verify (验证) 运行任意的检查来验证项目包有效且达到质量标准。
install(安装) 安装项目包到本地仓库,这样项目包可以用作其他本地项目的依赖。
deploy(部署) 将最终的项目包复制到远程仓库中与其他开发者和项目共享。

有一些与 Ma ven 生命周期相关的重要概念需要说明:

当一个阶段通过 Ma ven 命令调用时,例如 mvn compile,只有该阶段之前以及包括该阶段在内的所有阶段会被执行。

不同的 ma ven 目标将根据打包的类型(JAR / WAR / EAR),被绑定到不同的 Ma ven 生命周期阶段。

在下面的例子中,我们将 ma ven-antrun-plugin:run 目标添加到 Build 生命周期的一部分阶段中。这样我们可以显示生命周期的文本信息。

我们已经更新了 C:MVNproject 目录下的 pom.xml 文件。


4.0.0
com.companyname.projectgroup
project
1.0



org.apache.ma ven.plugins
ma ven-antrun-plugin
1.1

   
      id.validate
      validate
      
         run
      
      
         
            validate phase
         
      
   
   
      id.compile
      compile
      
         run
      
      
         
            compile phase
         
      
   
   
      id.test
      test
      
         run
      
      
         
            test phase
         
      
   
   
         id.package
         package
         
            run
         
         
         
            package phase
         
      
   
   
      id.deploy
      deploy
      
         run
      
      
      
         deploy phase
      
      
   




现在打开命令控制台,跳转到 pom.xml 所在目录,并执行以下 mvn 命令。

C:MVNproject>mvn compile

Ma ven 将会开始处理并显示直到编译阶段的构建生命周期的各个阶段。

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [compile]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.validate}]
[INFO] Executing tasks
     [echo] validate phase
[INFO] Executed tasks
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:MVNprojectsrcmainresources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [antrun:run {execution: id.compile}]
[INFO] Executing tasks
     [echo] compile phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
[INFO] Final Memory: 7M/64M
[INFO] ------------------------------------------------------------------

命令行调用

在开发环境中,使用下面的命令去构建、安装工程到本地仓库

mvn install

这个命令在进入 install 阶段之前,会按照顺序把 default 生命周期里的各个阶段先跑一遍,比如 validate、compile、package 等等。也就是说,实际使用时通常只需要调用最后那个阶段,这里对应的就是 install。

放到构建环境里,通常就用下面这种方式,更干净地完成项目构建,并把产物部署到共享仓库中。

mvn clean deploy

这行命令也可以用于多模块的情况下,即包含多个子项目的项目,Ma ven 会在每一个子项目执行 clean 命令,然后再执行 deploy 命令。

3、Site 生命周期

Ma ven Site 插件一般用来创建新的报告文档、部署站点等。

  • pre-site:执行一些需要在生成站点文档之前完成的工作
  • site:生成项目的站点文档
  • post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy:将生成的站点文档部署到特定的服务器上

实际开发里,最常打交道的通常就是site阶段和site-deploy阶段,它们主要负责生成并发布Ma ven站点。这算得上是Ma ven里很实用的一项能力,尤其对管理层来说很有吸引力:文档和统计数据可以自动产出,不仅省事,展示效果也比较直观。 在下面这个例子里,会把 ma ven-antrun-plugin:run 目标加入到 Site 生命周期的全部阶段中。这样一来,整个生命周期涉及到的文本信息就都能被完整展示出来。

我们已经更新了 C:MVNproject 目录下的 pom.xml 文件。


4.0.0
com.companyname.projectgroup
project
1.0



org.apache.ma ven.plugins
ma ven-antrun-plugin
1.1
   
      
         id.pre-site
         pre-site
         
            run
         
         
            
               pre-site phase
            
         
      
      
         id.site
         site
         
         run
         
         
            
               site phase
            
         
      
      
         id.post-site
         post-site
         
            run
         
         
            
               post-site phase
            
         
      
      
         id.site-deploy
         site-deploy
         
            run
         
         
            
               site-deploy phase
            
         
      
   



现在打开命令控制台,跳转到 pom.xml 所在目录,并执行以下 mvn 命令。

C:MVNproject>mvn site

Ma ven 将会开始处理并显示直到 site 阶段的 site 生命周期的各个阶段。

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO]    task-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] Executing tasks
     [echo] pre-site phase
[INFO] Executed tasks
[INFO] [site:site {execution: default-site}]
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Project Plugins" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO] [antrun:run {execution: id.site}]
[INFO] Executing tasks
     [echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
[INFO] Final Memory: 24M/149M
[INFO] ------------------------------------------------------------------```

免责声明:文中图文均来自网络,如有侵权请联系删除,心愿游戏发布此文仅为传递信息,不代表心愿游戏认同其观点或证实其描述。

相关文章

更多

精选合集

更多

大家都在玩

热门话题

大家都在看

更多