Maven生命周期
Maven对一个项目的构建过程进行了抽象和统一,由此形成的Maven生命周期具体包括项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等。Maven的生命周期是抽象的,其具体任务由插件完成。
三套生命周期
Maven拥有三套独立的生命周期,每个生命周期都不同的阶段。用户执行某一个生命周期的某一阶段时,会先执行该周期中该阶段之前的所有阶段,但对其他周期不产生任何影响。
clean生命周期
目的是清理项目,包含三个阶段
pre-clean
执行清理前的准备工作clean
清理上一次构建生成的文件post-clean
执行清理后的善后工作
default生命周期
定义构建的核心步骤,包含N多阶段,现只列出重要阶段:
- process-sources 处理项目的主要资源文件,通常对src/main/resources里的内容处理后,复制到项目输出的主classpath目录中。
- compile编译项目的主要源码,通常对src/main/java下的java文件编译后输出到主classpath目录中
- process-test-sources 处理项目的测试资源文件,通常对src/test/resources里的内容处理后,复制到项目输出的主classpath目录中
- test-compile编译项目的测试代码,通常对src/test/java下的java文件编译后输出到主classpath目录中
- test使用单元测试框架运行测试,测试代码不会被打包或部署
- package接受编译好的代码,打包成可发布的形式,如jar
- install将包安装到本地Maven仓库,供其他项目引用
- deploy将最终的包复制到远程仓库,供其他开发人员使用
site生命周期
目的是建立和发布项目站点
pre-site
执行一些在生成项目站点的准备工作site
生成项目站点文档post-site
执行生成项目站点后的善后工作site-deploy
将项目站点发布到服务器上
生命周期调用示例
mvn clean
调用clean周期的clean阶段,实际执行pre-clean、clean
mvn test
调用default周期的test阶段,实际执行default周期内test之前的所有阶段和test
mvn clean install
调用clean周期的clean阶段和default周期的install阶段
mvn clean deploy site-deploy
调用clean周期的clean阶段和default周期的deploy阶段和site周期的site-deploy阶段
插件
Maven在定义了抽象的生命周期后,并没有给出具体实现,其功能完全由独立的插件完成。对于插件本身,为了复用代码,通常可以完成一系列的任务和功能。这些功能聚集在一个插件里,每个功能都是一个插件目标 。例如maven-dependency-plugin有十多个目标,包括dependency:list、dependency:tree等。
插件绑定
Maven不同的生命周期与插件的不同目标绑定,就能实现整个构建过程。一个生命周期的某一阶段可以绑定多个插件目标,此时插件的执行顺序与插件的声明顺序相同。
默认绑定
为了让用户不用任何配置就能构建Maven项目,Maven为许多生命周期的重要阶段内置绑定关系。
生命周期:阶段 | 插件名称:目标 |
---|---|
clean:clean | maven-clean-plugin:clean |
site:site | maven-site-plugin:site |
site:deploy | maven-site-plugin:deploy |
default:process-resources | maven-resources-plugin:resources |
default:compile | maven-compile-plugin:compile |
default:process-test-resources | maven-resources-plugin:testResources |
default:test-compile | maven-compile-plugin:testCompile |
default:test | maven-surefire-plugin:test |
default:package | maven-jar-plugin:jar |
default:install | maven-install-plugin:install |
default:deploy | maven-deploy-plugin:deploy |
注意:default生命周期的插件绑定关系与项目打包类型有关,表中所述为默认打包类型jar的绑定关系,其它类型如war、pom可查看官方文档http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
自定义绑定
用户可以选择自己将特定的插件绑定到生命周期的某个阶段上,以完成个性化的需求。通过在项目的pom文件配置如下:
<build>
<plugins>
<plugin>
<groupId>...</groupId>
<artifactId>...</artifactId>
<version>...</version>
<executions>
<execution>
<id>...</id>
<phase>...</phase>
<goals>
<goal>...</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
groupId,artifactId,version唯一指定一个插件,<execution>
元素用来配置该插件的一个运行任务,<phase>
指定该任务在哪个生命周期执行,如install,<goal>
指定要执行的插件目标,该插件目标必须从属于前面指定的插件。有些插件在编写时定义了默认绑定阶段,可以使用maven-help-plugin插件查看相关信息,例如:
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compile-plugin:2.1
使用插件目标前缀替换插件的坐标表示如下:
mvn help:describe -Dplugin=compile
若只想获取该插件的某个目标的信息,可添加goal参数如下:
mvn help:describe -Dplugin=compile -Dgoal=compile
插件配置
在完成生命周期与插件绑定后,可以通过配置插件参数来进一步调控插件的行为。
命令行配置
用户可以在运行命令的时候,以-D名值对的形式配置插件,但是效力只限于该次运行 例如:
mvn install -Dmaven.test.skip = true
该命令指定这次调用install时,跳过测试阶段。
Pom文件全局配置
在项目pom文件中对某插件配置过后,该插件的行为会一直受其影响。适用于某些插件其参数从项目创建到发布都不改变的情况。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compile-plugin</artifactId>
<version>2.1</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
这段配置文件,指定了插件为maven-compile-plugin,参数使得插件编译java 1.5的源码,生成与JVM 1.5兼容的字节码文件
小结
本文主要介绍了Maven的生命周期,着重解析了default生命周期,给出了基本的插件绑定和配置方法。