[关闭]
@ghimi 2018-07-26T08:09:09.000000Z 字数 9040 阅读 722

Maven 构建生命周期

maven


构建生命周期是什么?

构建生命周期阶段的目标是执行顺序是一个良好定义的序列.
这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段:

阶段 处理 描述
准备资源 资源复制 资源复制可以定制
编译 执行编译 源代码编译在此阶段完成
包装 打包 创建JAR/WAR包如在 pom.xml 中定义提及的包
安装 安装 这一阶段在本地/远程Maven仓库安装程序包

可用于注册必须执行一个特定的阶段之前或之后的目标,有之前处理和之后处理阶段.
当 Maven 开始建立一个项目,它通过定义序列阶段步骤和执行注册的每个阶段的目标.
* clean
* default
* site
目标代表一个特定的任务,它有助于项目的建设和管理.可以被绑定到零个或多个生成阶段.一个没有绑定到任何构建阶段的目标,它的构建生命周期可以直接调用执行.
执行的顺序取决于目标和构建阶段时的调用顺序.例如,考虑下面的命令.清理和打包(mvn clean) 参数的构建阶段,而 dpendency:copy-dependencies package 是一个目标.

  1. mvn clean denpendency:copy-dependencies package

在这里,清洁的阶段将首先执行,然后是依赖关系:赋值依赖性的目标将被执行,最后执行打包阶段.

清理(clean) 生命周期

当我们执行命令mvn clean命令后, Maven 调用清理的生命周期有一下几个阶段组成:
* pre-clean
* clean
* post-clean
Maven 清洁目标 ( clean:clean ) 被绑定清理的生命周期阶段.clean:clean 目标删除 build 目录下的构建输出.因此,当 mvn clean 命令执行时, Maven 会删除编译目录.
目标清理生命周期在上述阶段,我们可以自定义此行为.
在下面的示例中,我们将附加 maven-antrun-plugin:run 对目标进行预清理,清理和清理后者三个阶段.这将使我们能够调用的信息显示清理生命周期的各个阶段.现在来创建了一个 pom.xml 文件在 C:\MVN\ 项目文件夹中,具体内容如下:

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.companyname.projectgroup</groupId>
  7. <artifactId>project</artifactId>
  8. <version>1.0</version>
  9. <build>
  10. <plugins>
  11. <plugin>
  12. <groupId>org.apache.maven.plugins</groupId>
  13. <artifactId>maven-antrun-plugin</artifactId>
  14. <version>1.1</version>
  15. <executions>
  16. <execution>
  17. <id>id.pre-clean</id>
  18. <phase>pre-clean</phase>
  19. <goals>
  20. <goal>run</goal>
  21. </goals>
  22. <configuration>
  23. <tasks>
  24. <echo>pre-clean phase</echo>
  25. </tasks>
  26. </configuration>
  27. </execution>
  28. <execution>
  29. <id>id.clean</id>
  30. <phase>clean</phase>
  31. <goals>
  32. <goal>run</goal>
  33. </goals>
  34. <configuration>
  35. <tasks>
  36. <echo>clean phase</echo>
  37. </tasks>
  38. </configuration>
  39. </execution>
  40. <execution>
  41. <id>id.post-clean</id>
  42. <phase>post-clean</phase>
  43. <goals>
  44. <goal>run</goal>
  45. </goals>
  46. <configuration>
  47. <tasks>
  48. <echo>post-clean phase</echo>
  49. </tasks>
  50. </configuration>
  51. </execution>
  52. </executions>
  53. </plugin>
  54. </plugins>
  55. </build>
  56. </project>

现在,打开命令控制台,到该文件夹包含 pom.xml 并执行以下mvn 命令.

  1. C:\MVN\project>mvn post-clean

Maven 将开始处理并显示生命周期的所有阶段.

  1. [INFO] Scanning for projects...
  2. [INFO] ------------------------------------------------------------------
  3. [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
  4. [INFO] task-segment: [post-clean]
  5. [INFO] ------------------------------------------------------------------
  6. [INFO] [antrun:run {execution: id.pre-clean}]
  7. [INFO] Executing tasks
  8. [echo] pre-clean phase
  9. [INFO] Executed tasks
  10. [INFO] [clean:clean {execution: default-clean}]
  11. [INFO] [antrun:run {execution: id.clean}]
  12. [INFO] Executing tasks
  13. [echo] clean phase
  14. [INFO] Executed tasks
  15. [INFO] [antrun:run {execution: id.post-clean}]
  16. [INFO] Executing tasks
  17. [echo] post-clean phase
  18. [INFO] Executed tasks
  19. [INFO] ------------------------------------------------------------------
  20. [INFO] BUILD SUCCESSFUL
  21. [INFO] ------------------------------------------------------------------
  22. [INFO] Total time: < 1 second
  23. [INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
  24. [INFO] Final Memory: 4M/44M
  25. [INFO] ------------------------------------------------------------------

你可以尝试调整 mvn 清理命令,该命令将显示清理前什么都不会执行.

默认(或生成)生命周期

这是 Maven 主要的生命周期,用于构建应用程序,他有一下23个阶段.

生命周期阶段 描述
validate 验证项目是否正确,并且所有必要的信息可用于完成构建过程
initialize 建立初始化状态,例如设置属性
gengerate-surces 产生任何的源代码包含在编译阶段
process-sources 处理源代码,例如,过滤器值
generate-resources 包含在保重产生的资源
process-resources 复制和处理资源到目标目录,准备打包阶段
compile 编译该项目的源代码
process-classes 从编译生成的文件提交处理,例如:Java 类的字节码增强/优化
genereate-test-sources 生成任何测试的源代码包含在编译阶段
process-test-sources 处理测试源代码,例如,过滤器任何值
test-compile 编译测试源代码到测试目标目录
process-test-classes 处理测试代码文件编译生成的文件
test 运行测试使用的合适的单元测试框架(Junit)
prepare-package 执行必要的任何操作的实际打包之前准备一个包
package 提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件
pre-integration-test 完成执行测试之前所需操作.例如,设置所需的环境
verify 运行任何检查,验证包是有效的,符合质量审核规定
install 将包安装到本地存储库,它可以用作当地其他项目的依赖
deploy 赋值最终的包到远程仓库与其他开发者和项目共享

有涉及到Maven 声明周期值得一提几个重要概念:
* 当一个阶段是通过 Maven 命令调用,例如: mvn compile,只有阶段到达并包括这个阶段才会被执行.
* 不同的Maven 目标绑定到 Maven 声明周期的不同阶段这是取决于包类型(JAR/WAR/EAR).
下面的示例中,将附加的 Maven 的 antrun 插件:运行目标构建生命周期的几个阶段.这将使我们能够回显的信息显示生命周期的各个阶段.

我们已经更新了在 C:\MVN\ 项目文件夹中的 pom.xml 文件.

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.companyname.projectgroup</groupId>
  7. <artifactId>project</artifactId>
  8. <version>1.0</version>
  9. <build>
  10. <plugins>
  11. <plugin>
  12. <groupId>org.apache.maven.plugins</groupId>
  13. <artifactId>maven-antrun-plugin</artifactId>
  14. <version>1.1</version>
  15. <executions>
  16. <execution>
  17. <id>id.validate</id>
  18. <phase>validate</phase>
  19. <goals>
  20. <goal>run</goal> </goals>
  21. <configuration>
  22. <tasks>
  23. <echo>validate phase</echo>
  24. </tasks>
  25. </configuration>
  26. </execution>
  27. <execution>
  28. <id>id.compile</id>
  29. <phase>compile</phase>
  30. <goals>
  31. <goal>run</goal>
  32. </goals>
  33. <configuration>
  34. <tasks>
  35. <echo>compile phase</echo>
  36. </tasks>
  37. </configuration>
  38. </execution>
  39. <execution>
  40. <id>id.test</id>
  41. <phase>test</phase>
  42. <goals>
  43. <goal>run</goal>
  44. </goals>
  45. <configuration>
  46. <tasks>
  47. <echo>test phase</echo>
  48. </tasks>
  49. </configuration>
  50. </execution>
  51. <execution>
  52. <id>id.package</id>
  53. <phase>package</phase>
  54. <goals>
  55. <goal>run</goal>
  56. </goals>
  57. <configuration>
  58. <tasks>
  59. <echo>package phase</echo>
  60. </tasks>
  61. </configuration>
  62. </execution>
  63. <execution>
  64. <id>id.deploy</id>
  65. <phase>deploy</phase>
  66. <goals>
  67. <goal>run</goal>
  68. </goals>
  69. <configuration>
  70. <tasks>
  71. <echo>deploy phase</echo>
  72. </tasks>
  73. </configuration>
  74. </execution>
  75. </executions>
  76. </plugin>
  77. </plugins>
  78. </build>
  79. </project>

现在,打开命令控制台,进入 pom.xml 并执行以下 mvn 命令.

  1. C:\MVN\project>mvn compile

编译阶段, Maven 将开始构建生命周期的阶段处理并显示

  1. INFO] Scanning for projects...
  2. [INFO] ------------------------------------------------------------------
  3. [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
  4. [INFO] task-segment: [compile]
  5. [INFO] ------------------------------------------------------------------
  6. [INFO] [antrun:run {execution: id.validate}]
  7. [INFO] Executing tasks
  8. [echo] validate phase
  9. [INFO] Executed tasks
  10. [INFO] [resources:resources {execution: default-resources}]
  11. [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
  12. i.e. build is platform dependent!
  13. [INFO] skip non existing resourceDirectory C:\MVN\project\src\main\resources
  14. [INFO] [compiler:compile {execution: default-compile}]
  15. [INFO] Nothing to compile - all classes are up to date
  16. [INFO] [antrun:run {execution: id.compile}]
  17. [INFO] Executing tasks
  18. [echo] compile phase
  19. [INFO] Executed tasks
  20. [INFO] ------------------------------------------------------------------
  21. [INFO] BUILD SUCCESSFUL
  22. [INFO] ------------------------------------------------------------------
  23. [INFO] Total time: 2 seconds
  24. [INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
  25. [INFO] Final Memory: 7M/64M
  26. [INFO] ------------------------------------------------------------------

网站的生命周期

Maven 的网站插件通常用于创建新的文档,创建报告,部署网站等.
阶段:
* pre-site
* site
* post-site
* site-deploy
在下面的示例中,我们将附加 maven-sntrun-plugin:run 目标网站的生命周期的所有阶段.这将使我们能够调用短信显示的生命周期的各个阶段.
现在更新 pom.xml 文件在 C:\MVN\项目文件夹中.

  1. <project xmlns="http://maven.apache.org/POM/4.0.0"
  2. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  4. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>com.companyname.projectgroup</groupId>
  7. <artifactId>project</artifactId>
  8. <version>1.0</version>
  9. <build>
  10. <plugins>
  11. <plugin>
  12. <groupId>org.apache.maven.plugins</groupId>
  13. <artifactId>maven-antrun-plugin</artifactId>
  14. <version>1.1</version>
  15. <executions>
  16. <execution>
  17. <id>id.pre-site</id>
  18. <phase>pre-site</phase>
  19. <goals>
  20. <goal>run</goal>
  21. </goals>
  22. <configuration>
  23. <tasks>
  24. <echo>pre-site phase</echo>
  25. </tasks>
  26. </configuration>
  27. </execution>
  28. <execution>
  29. <id>id.site</id>
  30. <phase>site</phase>
  31. <goals>
  32. <goal>run</goal>
  33. </goals>
  34. <configuration><tasks>
  35. <echo>site phase</echo>
  36. </tasks>
  37. </configuration>
  38. </execution>
  39. <execution>
  40. <id>id.post-site</id>
  41. <phase>post-site</phase>
  42. <goals>
  43. <goal>run</goal>
  44. </goals>
  45. <configuration>
  46. <tasks>
  47. <echo>post-site phase</echo>
  48. </tasks>
  49. </configuration>
  50. </execution>
  51. <execution>
  52. <id>id.site-deploy</id>
  53. <phase>site-deploy</phase>
  54. <goals>
  55. <goal>run</goal>
  56. </goals>
  57. <configuration>
  58. <tasks>
  59. <echo>site-deploy phase</echo>
  60. </tasks>
  61. </configuration>
  62. </execution>
  63. </executions>
  64. </plugin>
  65. </plugins>
  66. </build>
  67. </project>

打开命令控制台,进入该文件夹包含pom.xml并执行以下mvn命令.

  1. C:\MVN\project>mvn site

Maven将开始处理并显示网站的生命周期阶段的各个阶段.

  1. [INFO] Scanning for projects...
  2. [INFO] ------------------------------------------------------------------
  3. [INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
  4. [INFO] task-segment: [site]
  5. [INFO] ------------------------------------------------------------------
  6. [INFO] [antrun:run {execution: id.pre-site}]
  7. [INFO] Executing tasks
  8. [echo] pre-site phase
  9. [INFO] Executed tasks
  10. [INFO] [site:site {execution: default-site}]
  11. [INFO] Generating "About" report.
  12. [INFO] Generating "Issue Tracking" report.
  13. [INFO] Generating "Project Team" report.
  14. [INFO] Generating "Dependencies" report.
  15. [INFO] Generating "Project Plugins" report.
  16. [INFO] Generating "Continuous Integration" report.
  17. [INFO] Generating "Source Repository" report.
  18. [INFO] Generating "Project License" report.
  19. [INFO] Generating "Mailing Lists" report.
  20. [INFO] Generating "Plugin Management" report.
  21. [INFO] Generating "Project Summary" report.
  22. [INFO] [antrun:run {execution: id.site}]
  23. [INFO] Executing tasks
  24. [echo] site phase
  25. [INFO] Executed tasks
  26. [INFO] ------------------------------------------------------------------
  27. [INFO] BUILD SUCCESSFUL
  28. [INFO] ------------------------------------------------------------------
  29. [INFO] Total time: 3 seconds
  30. [INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
  31. [INFO] Final Memory: 24M/149M
  32. [INFO] -
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注