Maven 构建生命周期
-
什么是构建生命周期?
构建生命周期是一个定义明确的阶段序列,这些阶段定义了目标执行的顺序。这里的阶段代表生命周期的一个阶段。例如,典型的Maven Build Lifecycle由以下阶段序列组成。阶段 处理 描述 准备资源 资源复制 在此阶段可以自定义资源复制。 验证 验证信息 验证项目是否正确以及是否有所有必要的信息。 编译 编译 源代码编译在此阶段完成。 测试 测试 测试适合于测试框架的已编译源代码。 打包 打包 此阶段将创建pom.xml中的包中提到的JAR/WAR包。 安装 安装 此阶段将软件包安装在本地/远程Maven存储库中。 部署 部署 将最终软件包复制到远程存储库。 总有前期和后期阶段来注册目标,这些阶段必须在特定阶段之前或之后运行。当Maven开始构建项目时,它将逐步按照定义的阶段顺序执行目标,并在每个阶段中进行记录。Maven具有以下三个标准生命周期- pre-clean
- clean
- post-clean
Maven 清除目标(clean:clean)绑定到清洁生命周期中的clean阶段。其clean:cleangoal通过删除构建目录来删除构建的输出。因此,当执行mvn clean命令时,Maven会删除构建目录。通过在clean生命周期的上述任何阶段中提及目标,我们可以自定义此行为。在以下示例中,我们将maven-antrun-plugin:run目标附加到pre-clean,clean和post-clean阶段。这将使我们能够回显显示干净生命周期各个阶段的文本消息。我们在C:\MVN\project文件夹中创建了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.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命令,该命令将显示pre-clean和clean。post-clean阶段将不执行任何操作。 -
默认构建生命周期
这是Maven的主要生命周期,用于构建应用程序。它分为以下21个阶段。阶段 描述 验证 验证项目是否正确以及是否有所有必要的信息来完成构建过程。 初始化 初始化构建状态,例如set属性。 产生源 生成任何要包含在编译阶段的源代码。 过程源 处理源代码,例如,过滤任何值。 产生资源 生成要包含在包中的资源。 流程资源 将资源复制并处理到目标目录中,以准备打包阶段。 编译 编译项目的源代码。 过程类 对编译后生成的文件进行后处理,例如对Java类进行字节码增强/优化。 生成测试源 生成要包含在编译阶段的任何测试源代码。 流程测试源 处理测试源代码,例如,过滤所有值。 测试编译 将测试源代码编译到测试目标目录中。 过程测试类 处理从测试代码文件编译生成的文件。 测试 使用合适的单元测试框架(Junit是其中之一)运行测试。 准备包装 在实际包装之前,请执行准备包装所需的任何操作。 打包 取得编译后的代码并将其打包为可分发的格式,例如JAR,WAR或EAR文件。 整合前测试 在执行集成测试之前执行所需的操作。例如,设置所需的环境。 整合测试 如有必要,将程序包处理并部署到可以运行集成测试的环境中。 整合后测试 在执行集成测试后执行所需的操作。例如,清理环境。 校验 运行所有检查,以验证软件包有效并符合质量标准。 安装 将软件包安装到本地存储库中,该存储库可用作本地其他项目中的依赖项。 部署 将最终软件包复制到远程存储库,以便与其他开发人员和项目共享。 与Maven生命周期相关的重要概念很少,值得一提:- 通过maven命令调用某个阶段(例如mvn compile)时,仅执行该阶段之前(包括该阶段)的阶段。
- 根据打包的类型(JAR / WAR / EAR),不同的Maven目标将绑定到Maven生命周期的不同阶段。
在下面的示例中,我们将把maven-antrun-plugin:run目标附加到Build生命周期的几个阶段。这将使我们能够回显示生命周期各个阶段的文本消息。我们已经更新了C:\mvn\project文件夹中的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目标附加到站点生命周期的所有阶段。这将使我们能够回显显示生命周期各个阶段的文本消息。我们已经更新了C:\mvn\project文件夹中的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.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将开始处理并显示站点生命周期的各个阶段,直至站点(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] ------------------------------------------------------------------