7.4.1内置绑定
了为能让用户几乎不用任何配置就能构建Maven项目,Maven在核心为一些主要的生命周期阶段绑定了很多插件的目录,当用户通过命令行调用使命周期阶段的时候,对应插件目标就会执行相应的任务。
clean生命周期仅有pre-clean, clean和 post-clean三个阶段,其中的clean与maven-clean-plugin:clean绑定。maven-clean-plugin仅有clean这一个目标,其作用就是删除项目的输出目录。clean生命周期阶段与插件目标的绑定关系如表7-1所示。
site使命周期有pre-sie, site, post-site 和 site-deploy四个阶段,其中,site和maven-site-plugin:site相互绑定,site-deploy和 maven-site-plugin:deploy相互绑定。maven-site-plugin有很多目标,其中,site目标用来生成项目站点,deploy目标用来将项目站点部署到远程服务器上。site命令周期阶段与插件目标的绑定关系如表7-2所示。
相对于clean和site生命周期来说,default使命周期与插件目标的绑定关系就显得复杂一些。这是因为对于任何项目来说,例如jar项目和war项目,它们的项目清理和站点生成任务是一样的,不过构建过程上会有区别。例如jar项目需要打成JAR包,而war项目需要打成WAR包.
由于项目的打包类型会影响构建的具体过程,因此,default生命周期的阶段与插件目标的绑定关系由项目打包类型所决定,打包类型是通过POM中的packaging元素定义的,最常见,最最重的打包类型是jar,它也是默认的打包类型。基于该打包类型的项目,其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 | 将项目输出构件部署到远程仓库 |
注意,上表只列出了拥有插件绑定关系的阶段,default生命周期还有很多其他阶段,默认它们没有绑定任何插件,因此也没有任何实际行为。 除了默认的打包类型jar之外,常见的打包类型还有war, pom, maven-plugin, ear等它们的default生命周期与插件目录的绑定关系可参阅Maven官方文档。
读者可以从Maven的命令行输出中看到在项目构建过程执行了哪些插件目标,例如在一个maven项目里执行mvn clean install命令,执行的插件目标依次为maven-clean-plugin:clean,maven-resources-plugin:resources, maven-compiler-plugin:compile, maven-resources-plugin:testResources, maven-compiler-plugin:testCompile, maven-surefire-plugin:test, maven-jar-plugin:jar和maven-install-plugin:install。我们知道,mvn clean install命令实际调用了clean生命周期的pre-clean, clean阶段,以及default生命周期的从validate至install所有阶段。