构建生命周期阶段的目标是执行顺序是一个良好定义的序列。
这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段:
阶段 | 处理 | 描述 |
---|---|---|
准备资源 | 资源复制 | 资源复制可以进行定制 |
编译 | 执行编译 | 源代码编译在此阶段完成 |
包装 | 打包 | 创建JAR/WAR包如在 pom.xml 中定义提及的包 |
安装 | 安装 | 这一阶段在本地/远程Maven仓库安装程序包 |
-
Maven有以下三种标准的生命周期:
1: clean
2: default(或 build)
3: site
目标代表一个特定的任务,它有助于项目的建设和管理。可以被绑定到零个或多个生成阶段。一个没有绑定到任何构建阶段的目标,它的构建生命周期可以直接调用执行。
执行的顺序取决于目标和构建阶段折调用顺序。例如,考虑下面的命令。清理和打包(mvn clean)参数的构建阶段,而 dependency:copy-dependencies package 是一个目标。
mvn clean dependency:copy-dependencies package
在这里,清洁的阶段,将首先执行,然后是依赖关系:复制依赖性的目标将被执行,并终于将执行包阶段。
-
清洁生命周期
当我们执行命令 mvn clean 命令后,Maven 调用清洁的生命周期由以下几个阶段组成:
- 1:pre-clean
- 2:clean
- 3:post-clean
Maven 清洁目标(clean:clean)被绑定清洁干净的生命周期阶段。clean:clean 目标删除 build 目录下的构建输出。因此,当 mvn clean 命令执行时,Maven会删除编译目录。
目标清洁生命周期在上述阶段,我们可以自定义此行为。
在下面的示例中,我们将附加 maven-antrun-plugin:run 对目标进行预清洁,清洁和清洁后这三个阶段。这将使我们能够调用的信息显示清理生命周期的各个阶段。
现在来创建了一个 pom.xml 文件在 E:\WorkSpace\Study\MavenClean 项目文件夹中,具体内容如下:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gp6</groupId>
<artifactId>MavenClean</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-clean</id>
<phase>pre-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-clean phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.clean</id>
<phase>clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>clean phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.post-clean</id>
<phase>post-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>post-clean phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
现在,打开命令控制台,到该文件夹包含 pom.xml 并执行以下 mvn 命令。
E:\WorkSpace\Study\MavenClean>mvn post-clean
Maven将开始处理并显示清理生命周期的所有阶段。
Downloaded: http://114.215.137.201:8090/nexus/content/groups/public/org/codehaus
/plexus/plexus-utils/1.0.5/plexus-utils-1.0.5.jar (165 KB at 4.1 KB/sec)
[INFO] Executing tasks
[echo] pre-clean phase
[INFO] Executed tasks
[INFO]
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ MavenClean ---
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (id.clean) @ MavenClean ---
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (id.post-clean) @ MavenClean ---
[INFO] Executing tasks
[echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:03 min
[INFO] Finished at: 2017-05-04T11:00:55+08:00
[INFO] Final Memory: 7M/122M
[INFO] ------------------------------------------------------------------------
默认(或生成)生命周期
这是 Maven 主要的生命周期,用于构建应用程序。它有以下 23 个阶段。
|生命周期阶段| 描述|
|:----:|:----:|:----:|
|validate| 验证项目是否正确,并且所有必要的信息可用于完成构建过程|
|initialize |建立初始化状态,例如设置属性|
|generate-sources| 产生任何的源代码包含在编译阶段|
|process-sources |处理源代码,例如,过滤器值|
|generate-resources |包含在包中产生的资源|
|process-resources |复制和处理资源到目标目录,准备打包阶段|
|compile |编译该项目的源代码|
|process-classes |从编译生成的文件提交处理,例如:Java类的字节码增强/优化|
|generate-test-sources| 生成任何测试的源代码包含在编译阶段|
|process-test-sources| 处理测试源代码,例如,过滤器任何值|
|test-compile |编译测试源代码到测试目标目录|
|process-test-classes| 处理测试代码文件编译生成的文件|
|test |运行测试使用合适的单元测试框架(JUnit)|
|prepare-package |执行必要的任何操作的实际打包之前准备一个包|
|package |提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件|
|pre-integration-test| 完成执行集成测试之前所需操作。例如,设置所需的环境|
|integration-test| 处理并在必要时部署软件包到集成测试可以运行的环境|
|pre-integration-test| 完成集成测试已全部执行后所需操作。例如,清理环境|
|verify |运行任何检查,验证包是有效的,符合质量审核规定|
|install |将包安装到本地存储库,它可以用作当地其他项目的依赖|
|deploy |复制最终的包到远程仓库与其他开发者和项目共享|
有涉及到Maven 生命周期值得一提几个重要概念:
-
当一个阶段是通过 Maven命令调用,例如:mvn compile,只有阶段到达并包括这个阶段才会被执行。
-
不同的 Maven 目标绑定到 Maven生命周期的不同阶段这是这取决于包类型(JAR/WAR/EAR)。
在下面的示例中,将附加 Maven 的 antrun 插件:运行目标构建生命周期的几个阶段。这将使我们能够回显的信息显示生命周期的各个阶段。
在 E:\WorkSpace\Study\MavenAnturn 项目文件夹中放入 pom.xml 文件。
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gp6</groupId>
<artifactId>Maven</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.validate</id>
<phase>validate</phase>
<goals>
<goal>run</goal> </goals>
<configuration>
<tasks>
<echo>validate phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.compile</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>compile phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.test</id>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>test phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.package</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>package phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.deploy</id>
<phase>deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
现在,打开命令控制台,进入包含 pom.xml 并执行以下 mvn 命令。
E:\WorkSpace\Study\MavenAnturn>>mvn compile
编译阶段,Maven 将开始构建生命周期的阶段处理并显示。
[INFO] Executed tasks
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ MavenAntur
n ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e
. build is platform dependent!
[INFO] skip non existing resourceDirectory E:\WorkSpace\Study\MavenAnturn\src\ma
in\resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ Maven ---
[INFO] No sources to compile
[INFO]
[INFO] --- maven-antrun-plugin:1.1:run (id.compile) @ Maven ---
[INFO] Executing tasks
[echo] compile phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.817 s
[INFO] Finished at: 2017-05-04T11:26:59+08:00
[INFO] Final Memory: 9M/217M
[INFO] ------------------------------------------------------------------------
网站的生命周期
Maven的网站插件通常用于创建新的文档,创建报告,部署网站等。
阶段
1 :pre-site
2 :site
3 :post-site
4 :site-deploy
在下面的示例中,我们将附加 maven-antrun-plugin:run 目标网站的生命周期的所有阶段。这将使我们能够调用短信显示的生命周期的各个阶段。
现在更新 pom.xml 文件在 E:\WorkSpace\Study\MavenAnturn 项目文件夹中
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gp6</groupId>
<artifactId>Maven</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-site</id>
<phase>pre-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.site</id>
<phase>site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration><tasks>
<echo>site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.post-site</id>
<phase>post-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>post-site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.site-deploy</id>
<phase>site-deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>site-deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
打开命令控制台,进入该文件夹包含 pom.xml 并执行以下 mvn 命令。
C:\MVN\project>mvn site
Maven将开始处理并显示网站的生命周期阶段的各个阶段。
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.gp6:Maven: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] -
网友评论