一、生命周期 & 阶段

       生命周期是对所有构建过程的抽象和统一,总共抽象为三套不同的生命周期(clean、default、site),每个生命周期都包含不同的阶段。阶段之间是有顺序的,会顺序执行当前阶段及之前所有阶段。

  • clean:清理项目
  • pre-clean阶段
  • clean阶段
  • post-clean阶段
  • default:构建项目,最核心的部分
  • 编译项目主代码:包括复制resource和编译class
  • 编译项目test代码:包括复制test resource和编译test class
  • 打包
  • 部署到远程仓库
  • site:建立和发布项目站点
  • pre-site:生成项目站点之前需要完成的工作
  • site:生成项目站点文档
  • post-site:生成项目站点之后需要完成的工作
  • site-deploy:将生成的项目站点发布到服务器

二、插件 & 目标

       Maven的核心仅仅定义了抽象的生命周期,具体的任务交由插件完成。Maven核心为部分生命周期阶段绑定了默认插件目标,因此无需手动绑定,就可以通过 mvn clean(mvn 阶段名称)的方式调用绑定插件目标,完成实际行为

  • 生命周期是抽象的,其实际行为由插件完成
  • 每个插件包括多个功能,每个功能就是一个插件目标
  • 每个生命周期阶段可以绑定一个或多个插件目标

  1)内置绑定

       超级POM中为一些主要的生命周期阶段绑定了默认插件目标

  • clean生命周期

生命周期阶段

插件目标

执行任务

pre-clean


 

clean

maven-clean-plugin:clean

删除项目的输出目录

post-clean


 

  • default生命周期

生命周期阶段

插件目标

执行任务

process-resources

maven-resources-plugin:resources

复制主资源文件至主输出目录

compile

maven-compiler-plugin:compile

编译主代码至主输出目录

process-test-resources

maven-resources-plugin:testResources

复制测试资源文件至测试输出目录

test-compile

maven-compiler-plugin:testCompile

编译测试代码至测试输出目录

test

maven-surefire-plugin:test

执行测试用例

package

maven-jar-plugin:jar

创建项目jar包

install

maven-install-plugin:install

将项目输出构件安装到本地仓库

deploy

maven-deploy-plugin:deploy

将项目输出构件部署到远程仓库

  • site生命周周期

生命周期阶段

插件目标

执行任务

pre-site


 

site

maven-site-plugin:site

生成项目站点

post-site


 

site-deploy

maven-site-plugin:deploy

将项目站点部署至远程服务器

 

 

 

  2)自定义绑定

       用户可以选择将某个插件目标绑定到生命周期的某个阶段

  1. 在verify阶段(集成测试(post-integration-test)阶段之后,安装构件(install)阶段之前)创建源码jar包
<build>
	<plugins>
		<!-- 在verify阶段使用jar-no-fork插件目标将主代码打包成jar文件 -->
		<plugin>
			<!-- 插件的坐标 -->
			<groupId>org.apache.maven.plugins</groupId>
			<artifactId>maven-source-plugins</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>
  1. 部分插件目标在编写已经定义了默认绑定阶段,因此可以不配置<executions>元素

  3)查看插件信息

       使用help插件的describe目标查看插件信息,-D指定参数值 

mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddetail
## 等同于
mvn org.apache.maven.plugins:maven-help-plugin:2.2:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddetail

  4)插件前缀

       可以将插件前缀作为访问插件的唯一标识,因此在第3点中可以直接使用前缀help代替maven-help-plugin插件