插件目标
一个插件往往能执行多个任务,因此插件具有多个功能,每个功能就是一个插件目标 (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-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 | 将项目构建输出到远程仓库 |
上面只是列举了 default 生命周期绑定了插件的阶段,并非 default 的所有阶段。
自定义绑定
除了上面的内置绑定外,插件还支持自定义绑定,拿 maven-compiler-plugin
插件举例
上面代码将 maven-compiler-plugin
插件的 testCompile
目标绑定到 default 上面周期的 verify 阶段。当运行 mvn verify 时,该插件的 testCompile 目标就会执行。phase 表示绑定的声明周期阶段,因为插件可以在一个生命周期阶段运行多个方法,所以可以配置多个目标,即多个 goal。
有的时候,没有使用 phase,插件目标目标也能绑定到声明周期的阶段中去。这是因为很多插件在目标的编写时候已经定义好了默认绑定的阶段。可以使用命令查看 mvn help:describe -Dplugin=compiler -Ddetail
查看插件的详细信息,默认绑定的阶段等。
当一个阶段有多个插件目标绑定时,执行顺序与插件的声明顺序有关,先声明先执行。