Maven 构建生命周期
Maven 构建生命周期定义了一个我的项目构建跟公布的过程。
一个典型的 Maven 构建(build)生命周期是由以下几个阶段的序列组成的:
为了实现 default 生命周期,这些阶段(包含其余未在下面列举的生命周期阶段)将被按程序地执行。
Maven 有以下三个规范的生命周期:
clean:我的项目清理的解决
default(或 build):我的项目部署的解决
site:我的项目站点文档创立的解决
构建阶段由插件指标形成
一个插件指标代表一个特定的工作(比构建阶段更为精密),这有助于我的项目的构建和治理。这些指标可能被绑定到多个阶段或者无绑定。不绑定到任何构建阶段的指标能够在构建生命周期之外通过间接调用执行。这些指标的执行程序取决于调用指标和构建阶段的程序。
例如,思考上面的命令:
clean 和 pakage 是构建阶段,dependency:copy-dependencies 是指标
mvn clean dependency:copy-dependencies package
这里的 clean 阶段将会被首先执行,而后 dependency:copy-dependencies 指标会被执行,最终 package 阶段被执行。
Clean 生命周期
当咱们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期,它蕴含以下阶段:
pre-clean:执行一些须要在clean之前实现的工作
clean:移除所有上一次构建生成的文件
post-clean:执行一些须要在clean之后立即实现的工作
mvn clean 中的 clean 就是下面的 clean,在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行,也就是说,如果执行 mvn clean 将运行以下两个生命周期阶段:pre-clean, clean
如果咱们运行 mvn post-clean ,则运行以下三个生命周期阶段:pre-clean, clean, post-clean
咱们能够通过在下面的 clean 生命周期的任何阶段定义指标来批改这部分的操作行为。
在上面的例子中,咱们将 maven-antrun-plugin:run 指标增加到 pre-clean、clean 和 post-clean 阶段中。这样咱们能够在 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 将会开始解决并显示 clean 生命周期的所有阶段。
[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 阶段不执行任何操作。
Default (Build) 生命周期
这是 Maven 的次要生命周期,被用于构建利用,包含上面的 23 个阶段:![]有一些与 Maven 生命周期相干的重要概念须要阐明:
当一个阶段通过 Maven 命令调用时,例如 mvn compile,只有该阶段之前以及包含该阶段在内的所有阶段会被执行。
不同的 maven 指标将依据打包的类型(JAR / WAR / EAR),被绑定到不同的 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] ------------------------------------------------------------------
命令行调用
在开发环境中,应用上面的命令去构建、装置工程到本地仓库mvn install
这个命令在执行 install 阶段前,按程序执行了 default 生命周期的阶段 (validate,compile,package,等等),咱们只须要调用最初一个阶段,如这里是 install。
在构建环境中,应用上面的调用来污浊地构建和部署我的项目到共享仓库中mvn clean deploy
这行命令也能够用于多模块的状况下,即蕴含多个子项目的我的项目,Maven 会在每一个子项目执行 clean 命令,而后再执行 deploy 命令。
Site 生命周期
Maven Site 插件个别用来创立新的报告文档、部署站点等。
pre-site:执行一些须要在生成站点文档之前实现的工作
site:生成我的项目的站点文档
post-site: 执行一些须要在生成站点文档之后实现的工作,并且为部署做筹备
site-deploy:将生成的站点文档部署到特定的服务器上
这里常常用到的是site阶段和site-deploy阶段,用以生成和公布Maven站点,这可是Maven相当弱小的性能,Manager比拟喜爱,文档及统计数据主动生成,很难看。 在上面的例子中,咱们将 maven-antrun-plugin:run 指标增加到 Site 生命周期的所有阶段中。这样咱们能够显示生命周期的所有文本信息。
咱们曾经更新了 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 阶段的 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] ------------------------------------------------------------------```