maven生命周期.md

2016-10-30 13:29:10

maven生命周期

maven生命周期是抽象的,其实际行为都由插件来完成,maven拥有三套相互独立的生命周期,分别为clean、default、site,其中clean负责清理项目,default负责构建项目,site负责建立项目站点。每个生命周期包含一些阶段(phase),阶段有顺序,后面的阶段依赖于前面的阶段

clean生命周期

clean包含三个phase

pre_clean 执行清理前的准备工作
clean 清理上一次构建生成的文件
post_clean 执行一些清理后需要完成的工作

default生命周期

default包含构建的所有执行的步骤,重点阶段说明如下

process_sources 处理项目主资源文件,src/main/resources目录的内容变量替换,复制输出到主classpath
compile 编译项目的主源码,src/main/java目录的java文件至主classpath
process-test-sources 处理项目测试资源文件
test-compile 编译项目的测试代码
test 运行测试,测试代码不会被打包或部署
package 打包编译好的代码成可发布的格式
insatll 安装包至maven本地仓库
deploy 部署包至远程仓库

site生命周期

site生命周期的目的是建立和发布项目站点

pre-site 执行生成站点前期工作
site 生成项目站点文档
post-site 执行生成站点后期工作
site-deploy 将生成的站点发布到服务器上

命令行执行生命周期

从命令行执行mavne任务的最主要方式就是调用maven的生命周期阶段

#mvn clean 
该命令调用clean周期的clean阶段,实际执行的阶段为clean周期的pre-clean和clean两个阶段

#mvn test
该命令调用default周期的test阶段,实际执行的阶段为default周期的validate、initialize等直到test阶段
#mvn clean install
该命令调用clean周期的clean阶段和default周期的install阶段,该命令结合了两个生命周期
#mvn clean deploy site-deploy
该命令调用clean周期的clean阶段、default周期的deploy阶段和site周期的site-deploy阶段,该命令结合了三个生命周期

生命周期与插件目标

  • maven生命周期的阶段与插件相互绑定,用以完成实际的构建任务。未简化配置maven周期阶段默认内置绑定了很多插件目标,例
    - 自定义绑定插件目标
    ```shell
    <build>
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.1.1</version>
    <executions>
    #execution元素配置执行id为attach-sources的任务
    <execution>
    <id>attach-sources</id>
    <phase>verify</phase>
    #phase元素配置将插件绑定到verify生命周期
    <goals>
    <goal>jar-no-fork</goal>
    </goals>
    #goal元素配置执行的插件目标
    </execution>
    </executions>
    </plugin>
    </plugins>
    </build>

然后执行命令

verify```可执行插件目标,当多个插件目标绑定到同一个阶段时,插件目标的执行顺序由插件声明的先后顺序决定
- 插件的配置
命令行配置,可由java自带的-D参数设置,例```mvn install -Dmaven.test.skip=true```,该条命令意思是maven-surefire-plugin插件提供了一个maven.test.skip参数,为true时跳过测试。
插件也可全局配置如下
```shell
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
#如该插件是mavne官方插件,groupId配置可省略,不推荐
<artifactId>maven-compile-plugin</artifactId>
#插件版本最好显示设置,解析到最新版本和之前的版本可能发现变化,导致构建失败
<version>2.1.1</version>
#confiuration元素全局配置,基于java1.5版本编译
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>

  • 解析插件前缀
    插件前缀与groupId:artifactId一一对应的,这种对应关系存储在仓库元数据中。仓库元数据为artifactId/maven-metadata.xml文件,maven解析插件仓库元数据时,会默认使用org.apache.maven.plugins和org.codehaus.mojo两个groupId,也可自定义配置settings.xml上的groupId上的插件仓库元数据,maven不仅仅会检查org/apache/maven/plugins/artifactId/maven-metadata.xml和org/codehaus/mojo/artifactId/maven-metadata.xml两个官方文件,还会检查用户自定义配置com/your/plugins/maven-metadata.xml