maven实战总结——7章生命周期和插件

简述

mvn的生命周期是为了所有的构建过程进行抽象和统一,mvn的生命周期包括清理、编译、测试、打包、集成测试、验证、部署和站点生成。mvn的生命周期是抽象的,它只是定义了一个构件的过程,具体每个过程做什么是由mvn插件实现的。

三套生命周期

  • mvn有三套生命周期,分别为clean、default、site,每个生命周期是相互独立的。
  • 每个生命周期包含一些阶段(phase),这些阶段是固定且有序的,后面的阶段依赖与前面的阶段。当用户调用default生命周期的complile阶段时,不会调用clean生命周期的阶段

clean生命周期

  • pre-clean 阶段 执行一些清理前需要完成的工作
  • clean 清理上一次构建生成的文件
  • post-clean 执行一些清理后完成的工作

default 生命周期

default 生命周期定义了真正构建需要执行的所有步骤,是所有生命周期的最核心的部分,有如下的阶段(phase)

  • validate
  • initialize 初始化
  • generate-sources 生成src
  • process-sources 处理项目代码
  • generate-resources 生成项目的资源文件
  • process-resources 处理项目的资源文件
  • compile 编译项目的主代码
  • process-classed
  • generate-test-sources 生成测试代码
  • generate-test-sources 处理测试的代码
  • generate-test-resources
  • process-test-resources
  • test-compile 编译测试代码
  • process-test-classed
  • test 使用单元测试框架运行测试
  • prepare-package
  • package 打包编译代码,如jar,war
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify 验证
  • install 将包安装到本地仓库
  • deploy 将包部署到远程仓库

site生命周期

site生命周期的目的是建立和发布站点,包括如下阶段

  • pre-site
  • site 生成项目站点文档
  • post-site
  • site-deploy 将站点发布到服务器上

常用生命周期的命令行操作

mvn clean 执行clean生命周期的 pre-clean和clean阶段
mvn test  执行default的生命周期的阶段,直到test的所有阶段
mvn clean install 
mvn clean deploy site-deploy

插件的目标

mvn的生命周期和对应的阶段只是定义了一个项目编译的流程,并没有具体的实现,具体的实现是在插件的目标中定义的。因此我们可以把插件的目标与生命周期的阶段绑定来定制具体的编译动作。
既将插件的目标与生命周期的阶段进行绑定。

内置绑定

为了让用户不用任何配置就能构建mvn项目,mvn为生命周期的某些阶段默认的绑定了一些插件。
clean生命周期阶段

阶段插件目标
pre-clean-
cleanmaven-clean-plugin:clean
post-clean-

site生命周期

阶段绑定目标
pre-site-
sitemaven-site-plugin:site
post-site-
site-deploymaven-site-plugin:deploy

default 生命周期绑定的插件(jar打包方式)

阶段绑定插件执行任务
process-resourcesmaven-resource-plugin:resources复制主资源文件至主输出目录
compilemaven-compiler-plugin:compile编译主代码至输出目录
process-test-resourcesmaven-resource-plugin :testResources复制测试资源文件到测试目录
test-compilemaven-compiler-plugin:testCompile编译测试代码到测试输出目录
testmaven-surefire-plugin:test执行测试用例
packagemaven-jar-plugin:jar创建项目jar包
installmaven-install-plugin:install安装到本地仓库
deploymaven-deploy-plugin:deploy发布到远程仓库

这里只列出了绑定了目标的阶段,default还有其他很多阶段没有绑定目标。因此没有实际的行为。
处理jar的打包方式外,mvn还其他的打包方式,具体的默认绑定行为参考官方文档

自定义绑定

除了内置绑定外,用户还可以自定义将插件的目标绑定到某个阶段上。
一个常见的例子是创建项目的源码jar包,可以通过maven-source-plugin插件的jar-no-fork目标完成这个任务,

<build>
		<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.1.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
  		</plugins>
   </build>

默认的groupId

org.apache.maven.plugins 是mvn官方插件默认的groupId

插件的全局配置

<build>
	<plugins>
	 <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
 	</plugins>
 </build>

这样不管是绑定到compile阶段的maven-compiler-plugin:compile任务还是testCompile任务都会根据1.8进行编译。

mvn插件信息获取

http://maven.apache.org/plugins/index.html 官方插件信息列表
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddetail 用命令查看插件的信息
mvn help:describe -Dplugin=compiler 插件的前缀简化版
mvn help:describe -Dplugin=compiler -Dgoal=compile 只查询某个目标的信息
mvn help:describe -Dplugin=compiler -Dgoal=compile  -Ddetail 增加详细信息参数 

插件版本的解析

在用户没有指定插件版本的情况下,mvn会自动解析插件的版本。

  • 首先,mvn在超级的pom中为所有的核心插件都设置了默认的版本,因此在使用核心插件的时候如没有指定版本,使用的则是超级pom中定义的版本
  • 如果用户使用的插件不是核心插件,又没有指定版本,mvn会遍历所有的仓库,获取所有可用的版本,之后使用最新的非快照版本。这里的解析是通过groupId/artifactId/maven-metadata.xml实现的

插件前缀的解析

mvn命令可以通过简化前缀的方式简化的调用,这里的前缀是和groupId:artifactId一一对应的,这种关系存贮在仓库的元数据中,这里的元数据为groupId/maven-metedata.xml,相应的mvn在解析仓库元数据的时候,默认会使用org.apache.maven.plugins和org.codehaus.mojo两个groupId,也可以配置settings让mvn检查其他的元数据
如下:

<settings>
	<pluginGrouops>
		<pluginGroup>com.your.plugins</pluginGroup>#这样就可以定制自己的插件的前缀了
	</pluginGrouops>
</settings>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值