Maven - 建立生命周期

什么是构建生命周期?

构建生命周期是明确定义的阶段序列,它定义了目标的执行顺序.这里阶段代表生命周期的一个阶段.例如,典型的 Maven构建生命周期由以下几个阶段组成.

PhaseHandles描述
prepare-resources资源复制可以在此自定义资源复制阶段.
验证验证信息验证项目是否正确以及是否所有必要信息都可用.
compile编译源代码编译在此阶段完成.
测试测试测试适合的已编译源代码测试框架.
package打包此阶段创建JOM/WAR包,如POM.xml中的包装中所述.
installinstallation此阶段将软件包安装在本地/远程maven存储库中.
Deploy部署将最终包复制到远程存储库.

总有 pre post 阶段注册目标,必须在特定阶段之前或之后运行.

当Maven开始建造项目时ct,它逐步执行已定义的阶段序列并执行目标,这些目标在每个阶段都已注册.

Maven具有以下三个标准生命周期 :

  • clean

  • 默认(或构建)

  • site

目标表示有助于构建和管理项目的特定任务.它可能绑定到零个或多个构建阶段.未绑定到任何构建阶段的目标可以通过直接调用在构建生命周期之外执行.

执行顺序取决于目标和构建阶段的顺序(s)被援引.例如,请考虑以下命令. clean package 参数是构建阶段,而依赖项:copy-dependencies 是目标.

 
 mvn clean dependency:copy-dependencies package

这里的 clean 阶段将是首先执行,然后执行依赖:copy-dependencies目标,最后执行 package 阶段.

清洁生命周期

当我们执行 mvn post-clean 命令时,Maven会调用由以下阶段组成的清洁生命周期.

  • 预清洁

  • 清洁

  • 后清洁

Maven clean目标(clean:clean)绑定到clean生命周期中的 clean 阶段.它的 clean:cleangoal 通过删除构建目录来删除构建的输出.因此,当执行 mvn clean 命令时,Maven会删除构建目录.

我们可以通过提及清洁生命周期的上述任何阶段中的目标来自定义此行为.

在下面的示例中,我们将maven-antrun-plugin:run目标添加到预清洁,清洁和后清洁阶段.这将允许我们回显显示清洁生命周期阶段的文本消息.

我们在C:\ MVNN \ project文件夹中创建了一个pom.xml.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "https://img01.yuandaxia.cn/Content/img/tutorials/maven/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.companyname.projectgroup</groupId>
   <artifactId>project</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 命令.

 
 C:\ MVN \ project> mvn post-clean

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

[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 命令,这将显示预清洁并清理干净. post-clean 阶段不会执行任何操作.

默认(或构建)生命周期

这是主要生活Maven的循环并用于构建应用程序.它有以下21个阶段.

Sr.No.生命周期阶段&说明
1

验证

验证项目是否正确,并且所有必要信息都可用于完成构建过程.

2

初始化

初始化构建状态,例如set properties .

3

生成-sources

生成要包含在编译阶段的任何源代码.

4

process-sources

处理源代码,例如,过滤任何值.

5

生成资源

生成要包含在包中的资源.

6

process-resources

复制和处理将资源放入目标目录,准备好打包阶段.

7

编译

编译项目的源代码.

8

进程类

对编译后生成的文件进行后处理,例如对Java类进行字节码增强/优化.

9

generate-test-sources

生成要包含在编译阶段的任何测试源代码.

10

process-test-sources

处理测试源代码,例如,过滤任何值.

11

test-compile

将测试源代码编译到测试目标目录中.

12

流程测试类

从测试代码文件编译处理生成的文件.

13

测试

使用合适的单元测试框架运行测试(Junit是一个).

14

准备 - 包

在实际包装之前执行准备包所需的任何操作.

15

获取编译后的代码并打包以可分发的格式,例如JAR,WAR或EAR文件.

16

预集成测试

在执行集成测试之前执行所需的操作.例如,设置所需的环境.

17

集成测试

如有必要,可以将软件包处理并部署到可以运行集成测试的环境中.

18

集成后测试

执行集成测试后执行所需的操作.例如,清理环境.

19

验证

运行任何检查以验证包是否有效且符合质量标准.

20

安装

将软件包安装到本地存储库中,该软件包可以在本地用作其他项目的依赖项.

21

部署

将最终包复制到远程存储库以便与其他开发人员共享项目.

有几个与Maven Lifecycles相关的重要概念,值得一提 :

  • 当通过Maven命令调用某个阶段时,例如 mvn compile ,包含该阶段将会执行.

  • 不同的maven目标将绑定到Maven生命周期的不同阶段,具体取决于包装类型(JAR/WAR/EAR).

在下面的例子中,我们将附加maven-antrun-plugin:run目标是构建生命周期的几个阶段.这将允许我们回显显示生命周期阶段的文本消息.

我们在C:\ MVNN \ project文件夹中更新了pom.xml.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "https://img01.yuandaxia.cn/Content/img/tutorials/maven/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.companyname.projectgroup</groupId>
   <artifactId>project</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 命令.

C:\ MVN \ project> mvn compile

Maven将开始处理和显示构建生命周期阶段直到编译阶段.

[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:\MVN\project\src\main\resources
[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] -----------------------------------------------------------------
-

网站生命周期

Maven网站插件通常用于创建新文档以创建报告,部署网站等.有以下阶段 :

  • pre-site

  • 网站

  • 网站后

  • 网站部署

在以下示例中,我们将 maven-antrun-plugin:run 目标附加到Site生命周期的所有阶段.这将允许我们回显显示生命周期阶段的文本消息.

我们在C:\ MVNN \ project文件夹中更新了pom.xml.

<project xmlns = "http://maven.apache.org/POM/4.0.0"
   xmlns:xsi = "https://img01.yuandaxia.cn/Content/img/tutorials/maven/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.companyname.projectgroup</groupId>
   <artifactId>project</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.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] ------------------------------------------------------------------