@ghimi
2018-07-26T08:09:09.000000Z
字数 9040
阅读 799
maven
构建生命周期阶段的目标是执行顺序是一个良好定义的序列.
这里使用一个例子,一个典型的 Maven 构建生命周期是由下列顺序的阶段:
| 阶段 | 处理 | 描述 |
|---|---|---|
| 准备资源 | 资源复制 | 资源复制可以定制 |
| 编译 | 执行编译 | 源代码编译在此阶段完成 |
| 包装 | 打包 | 创建JAR/WAR包如在 pom.xml 中定义提及的包 |
| 安装 | 安装 | 这一阶段在本地/远程Maven仓库安装程序包 |
可用于注册必须执行一个特定的阶段之前或之后的目标,有之前处理和之后处理阶段.
当 Maven 开始建立一个项目,它通过定义序列阶段步骤和执行注册的每个阶段的目标.
* clean
* default
* site
目标代表一个特定的任务,它有助于项目的建设和管理.可以被绑定到零个或多个生成阶段.一个没有绑定到任何构建阶段的目标,它的构建生命周期可以直接调用执行.
执行的顺序取决于目标和构建阶段时的调用顺序.例如,考虑下面的命令.清理和打包(mvn clean) 参数的构建阶段,而 dpendency:copy-dependencies package 是一个目标.
mvn clean denpendency: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.0http://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 | 建立初始化状态,例如设置属性 |
| 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 文件.
<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.0http://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-sntrun-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.0http://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] -