Maven构建生命周期

来源:互联网 发布:辽宁省国税发票软件 编辑:程序博客网 时间:2024/04/27 10:20

Maven 构建生命周期


构建生命周期是什么?

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

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

可用于注册必须执行一个特定的阶段之前或之后的目标,有之前处理和之后阶段。
当 Maven 开始建立一个项目,它通过定义序列阶段步骤和执行注册的每个阶段的目标。 Maven有以下三种标准的生命周期:

  • clean

  • default(或 build)

  • site

目标代表一个特定的任务,它有助于项目的建设和管理。可以被绑定到零个或多个生成阶段。一个没有绑定到任何构建阶段的目标,它的构建生命周期可以直接调用执行
执行的顺序取决于目标和构建阶段折调用顺序。例如,考虑下面的命令。清理和打包(mvn clean)参数的构建阶段,而 dependency:copy-dependencies package 是一个目标。

mvn clean dependency:copy-dependencies package

在这里,清洁的阶段,将首先执行,然后是依赖关系:复制依赖性的目标将被执行,并终于将执行包阶段。

清洁生命周期

当我们执行命令 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\ 项目文件夹中,具体内容如下:

<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.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 清洁命令,该命令将显示清洁什么都不会被执行。

默认(或生成)生命周期

这是 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 插件:运行目标构建生命周期的几个阶段。这将使我们能够回显的信息显示生命周期的各个阶段。
我们已经更新了在 C:\MVN\ 项目文件夹中的 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.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

  • site

  • post-site

  • site-deploy

在下面的示例中,我们将附加 maven-antrun-plugin:run 目标网站的生命周期的所有阶段。这将使我们能够调用短信显示的生命周期的各个阶段。
现在更新 pom.xml 文件在 C:\MVN\ 项目文件夹中。

<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.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] -

原创粉丝点击