在讲述插件与生命周期关系以前,要明确一个概念,那就是插件目标。Maven它只抽象或者定义了生命周期与对应的任务,html
真正去实现这些任务的是各个插件,因此maven的发布包只有3M左右的大小,当须要去作特定任务的时候,才会去下载插件(.jar). 从代码优化角度或者对于插件自己,考虑到代码的重用性,各任务之间想必必定会有可重用部分的代码,或者说,一部分可重用的代码,也能作不少事情。 因此一个插件,它并非简单的完成一个任务,而是包含了不少任务,而这些插件可作的事情,就是插件目标。shell
以maven-dependency-plugin 插件为例, 它有10多个目标,如denpendency:analze,denpendency:tree 等,冒号以前的部分是插件名称,能够是缩写也能够全称,冒号后面则是这个插件的目标。
apache
Maven的生命周期与插件相互绑定,用以完成构建任务。具体而言就是生命周期的阶段与插件的目标相互绑定。例如项目编译这一任务,它对应了 default 中的compile阶段,而maven-compile-plugin这个插件的目标compile能够完成这件事情maven
为了可以让用户不用配置就可以构建maven项目,maven 默认将生命周期的某些阶段与插件目标作了绑定,当用户经过命令调用生命周期阶段的时候,对应的插件目标就会开始工做。ide
并非全部的生命周期都有对应的插件目标,由于,默认的也不会相应的行为发生。优化
生命周期阶段 |
插件目标 |
clean |
mave-clean-plugin:clean |
site |
maven-site-plugin:site |
deploy |
maven-deploy-plugin:deploy |
process-resources | maven-resources-plugin:resources |
process-test-resources |
maven-resources-plugin:testResources |
compile |
maven-compile-plugin:compile |
test-compile |
maven-compile-plugin:testCompile |
test |
maven-surefire-plugin:test |
install |
maven-install-plugin:install |
deploy |
maven-deploy-plugin:deploy |
package |
package 比较特殊,根据打包类型会对应不一样的插件目标,以jar 为例,spa maven-jar-plugin:jar |
除了内置绑定之外,用户还可以本身选择将某个插件目标绑定到生命周期的某个阶段上。最多见的就是在打成jar包的过程,内置绑定没有涉及到 source 这一任务,须要自行绑定maven-source-plugin。code
<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有着不少不少插件,大部分都来自于apache和codehaus提供。
Apache提供的插件都具备较高的稳定性,具体可参阅 Apache Maven插件列表
Codehaus上的mojo也提供了大量的插件,具体可参阅Codehaus Maven插件列表
同时也能够调用命令 mvn help 来获取插件信息
mvn help: describe-Dplugin=org.apache.maven.plugins:maven-compiler-plugin:2.1