up:: Maven 插件 tag::插件的基本概念

插件目标

一个插件往往能执行多个任务,因此插件具有多个功能,每个功能就是一个插件目标 (goal)

maven-dependency-plugin 插件就有十多个 goal,每个 goal 对应一个功能,例如常用的两个功能:

  • dependency:list
  • dependency:tree

冒号前面是插件前缀,冒号后面是该插件的目标。

插件绑定

maven 的生命周期与插件相互绑定,具体而言就是生命周期的阶段与插件的目标相互绑定。例如 mvn compile就是 default 生命周期 compile 阶段与 maven-compiler-plugin 插件的 compile目标绑定。

内置绑定

为了简化配置,maven 为一些核心的生命周期阶段绑定了很多插件的目标。当用户调用对于的生命周期阶段时,绑定的插件目标就会执行相应的任务。

例如:clean 生命周期的 clean 阶段,就绑定了 maven-clean-plugin插件的 clean 目标绑定。site 生命周期的 site 阶段绑定 maven-site-plugin 插件的 site 目标,site-deploy 阶段绑定到 maven-site-pugin插件的 deploy目标。

由于项目的打包类型会影响构建的具体过程,因此 default 的生命周期阶段与插件的目标绑定关系与打包类型有关系。

default 生命周期的内置插件绑定关系(打包类型为 jar)

生命周期阶段插件目标执行任务
process-resourcesmaven-resources-plugin:resources复制主资源文件至输出目录
compilemaven-compiler-plugin:compile编译主代码至输出目录
process-test-resourcesmaven-resources-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 生命周期绑定了插件的阶段,并非 default 的所有阶段。

自定义绑定

除了上面的内置绑定外,插件还支持自定义绑定,拿 maven-compiler-plugin插件举例

 
 <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
               	 <executions>
                    <execution>
                        <id>diy-compile</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
</plugins>
 

上面代码将 maven-compiler-plugin插件的 testCompile目标绑定到 default 上面周期的 verify 阶段。当运行 mvn verify 时,该插件的 testCompile 目标就会执行。phase 表示绑定的声明周期阶段,因为插件可以在一个生命周期阶段运行多个方法,所以可以配置多个目标,即多个 goal。

有的时候,没有使用 phase,插件目标目标也能绑定到声明周期的阶段中去。这是因为很多插件在目标的编写时候已经定义好了默认绑定的阶段。可以使用命令查看 mvn help:describe -Dplugin=compiler -Ddetail 查看插件的详细信息,默认绑定的阶段等。

当一个阶段有多个插件目标绑定时,执行顺序与插件的声明顺序有关,先声明先执行