maven生命周期和插件
Posted 7788it
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了maven生命周期和插件相关的知识,希望对你有一定的参考价值。
maven生命周期(lifecycle)对构建的过程进行了抽象和统一,实际的工作是由对应的插件(plugins)来完成的。
maven生命周期
maven生命周期可以分为三个部分:
clean生命周期
该周期的任务是清理项目,包含三个阶段:
pre-clean | 执行清理前需要完成的工作 |
---|---|
clean | 清理上一次构建生成的文件 |
post-clean | 执行清理后需要完成的工作 |
default生命周期
default生命周期定义了真正构建时需要的所有步骤。
validate | 验证项目是正确的,所有必要的信息是可用的 |
---|---|
initialize | 初始化构建状态,例如:设置属性或创建目录 |
generate-sources | 生成编译期的源代码。 |
process-sources | 处理项目主资源文件。一般来说是对src/main/resources目录内容 进行变量替换等工作后,复制到项目输出的主目录classpath目录中 |
generate-resources | 生成包含在打包过程中的资源 |
process-resources | 复制和处理资源到目标目录,准备打包 |
compile | 编译项目的源代码 |
process-classes | 处理编译后生成的class文件 |
generate-test-sources | 生成编译期内的测试源代码 |
process-test-sources | 处理测试源代码,如过滤一些值 |
generate-test-resources | 创建测试资源 |
process-test-resources | 复制测试资源到目标目录并处理 |
test-compile | 编译测试源代码到测试目标目录 |
process-test-classes | 处理编译测试代码后生成的class文件 |
test | 使用合适的单元测试框架运行测试。 这些测试代码不会被打包和 部署 |
prepare-package | 执行打包前需要的任何工作 |
package | 接收编译好的代码,打包成可发布的格式,如jar,war等 |
pre-integration-test | 执行集成测试之前所需的操作 |
integration-test | 如果需要,可以将软件包处理和部署到可以运行集成测试的环境中 |
post-integration-test | 执行集成测试之后所需的操作 |
verify | 运行任何检查以验证程序包是否有效并符合质量标准 |
install | 将程序包安装到maven本地仓库,供本地其他maven项目使用 |
deploy | 将最终包复制到远程仓库,供其它开发人员和maven项目使用 |
site生命周期
site生命周期的作用是建立和发布项目站点。
pre-site | 执行一些在生成项目站点之前所需要完成的工作 |
---|---|
site | 生成项目站点文档 |
post-site | 执行一些在生成项目站点之后需要完成的工作 |
site-deploy | 将生成的项目站点发布到服务器上 |
maven生命周期是相互依赖的关系,如执行 mvn clean命令时,会执行pre-clean,clean阶段;执行mvn deploy会执行default生命周期前面的所有阶段。
插件目标
maven生命周期的各个阶段是和插件绑定在一起的,一个插件可以包含多个功能,每个功能对应生命周期的一个阶段,并称其为插件目标。如:maven-dependency-plugin包含插件目标:dependency:tree,dependency:list,dependency:analyze等。
内置绑定插件
maven在核心为一些主要的生命周期绑定了许多插件目标:
clean生命周期阶段与插件绑定情况:
生命周期阶段 | 插件目标 |
---|---|
pre-clean | maven-clean-plugin:clean |
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 | maven-site-plugin:site |
site | |
post-site | |
site-deploy | maven-site-plugin:deploy |
如,对项目执行 mvn clean install 命令:
--- maven-clean-plugin:2.5:clean (default-clean) @ viswcm-project ---
[INFO] Deleting D:\workspace\viswcm-project\target
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ viswcm-project ---
[INFO] Using ‘UTF-8‘ encoding to copy filtered resources.
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:compile (default-compile) @ viswcm-project ---
[INFO] Compiling 20 source files to D:\workspace\viswcm-project\target\classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ viswcm-project ---
[INFO] Using ‘UTF-8‘ encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory D:\workspace\viswcm-project\src\test\resources
[INFO]
[INFO] --- maven-compiler-plugin:2.5.1:testCompile (default-testCompile) @ viswcm-project ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ viswcm-project ---
[INFO] No tests to run.
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ viswcm-project ---
[INFO] Building jar: D:\workspace\viswcm-project\target\viswcm-project-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ viswcm-project ---
[INFO] Installing D:\workspace\viswcm-project\target\viswcm-project-0.0.1-SNAPSHOT.jar to D:\64\m2\repository\com\visgreat\viswcm-project\0.0.1-SNAPSHOT\viswcm-project-0.0.1-SNAPSHOT.jar
[INFO] Installing D:\workspace\viswcm-project\pom.xml to D:\64\m2\repository\com\visgreat\viswcm-project\0.0.1-SNAPSHOT\viswcm-project-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
其输出结果和上面的表格描述一致。
自定义插件绑定
除了maven内置绑定,我们还可以自行绑定某个插件到某个生命周期的某个阶段。
比如要生成项目源码jar包,我们可以将maven-source-plugin插件配置到default生命周期的verify阶段:
<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>
上述配置描述了maven-source-plugin插件坐标外,还有插件执行配置executions元素下的每个execution子元素可以用来配置执行一个任务。这里配置了一个id为attach-sources的任务,通过phase元素,将其绑定到verify阶段上,再通过goals配置指定执行的插件目标。
运行mvn verify:
[INFO] --- maven-source-plugin:2.1.1:jar-no-fork (attach-sources) @ viswcm-project ---
•[INFO] Building jar: D:\workspace\viswcm-project\target\viswcm-project-0.0.1-SNAPSHOT-sources.jar
获取插件信息
maven官方插件:http://maven.apache.org/plugins/index.html
maven官方插件下载地址:http://repo1.maven.org/maven2/org/apache/maven/plugins/
配置插件仓库
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Maven.Plugin.Repository</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
</pluginRepository>
</pluginRepositories>
《Maven实战》读书笔记
以上是关于maven生命周期和插件的主要内容,如果未能解决你的问题,请参考以下文章