Maven的生命周期与插件相互绑定,用以完成实际的构建任务。具体而言,是生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务。例如项目编译这一任务,它对应了default生命周期的compile这一阶段,而maven-compiler-plugin这一插件的compile目标可以完成该任务。所以将它们绑定,就能实现项目编译的目的。apache
1. 内置绑定:bash
为了能让用户几乎不用任何配置就能构建Maven项目,Maven在核心为一些主要的生命周期阶段绑定了不少插件的目标,当用户经过命令行调用生命周期阶段的时候,对应的插件目标就会执行相应的任务。服务器
clean生命周期仅有pre-clean、clean和post-clean三个阶段,其中的clean与maven-clean-plugin:clean绑定。maven-clean-plugin仅有clean这一个目标,其做用就是删除项目的输出目录。maven
site生命周期有pre-site、site、post-site和site-deploy四个阶段。其中site和maven-site-plugin:site相互绑定,site-deploy和maven-site-plugin:deploy相互绑定。maven-site-plugin有不少目标,其中,site目标用来生成项目站点,deploy目标用来将项目站点部署到远程服务器上。post
default生命周期与插件目标的绑定关系要复杂得多。这是由于对于任何项目来讲,例如jar项目和war项目,它们的项目清理和站点生成任务是同样的,不过构建过程会有区别。例如jar项目须要打包成jar包,而war项目须要打成war包。测试
因为项目的打包类型会影响构建的具体过程,所以default生命周期的阶段与插件目标的绑定关系由项目打包类型所决定。最多见最重要的打包类型是jar,它也是默认的打包类型。基于该打包类型的项目,其default生命周期的内置插件绑定关系及具体任务以下表所示:ui
default生命周期的内置插件绑定关系及具体任务(打包类型:jar):spa
生命周期阶段 | 插件目标 | 执行任务 |
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生命周期还有不少其余阶段,默认它们没有绑定任何插件,所以也没有任何实际行为。插件
咱们能够从Maven的命令行输出中看到在项目构建过程当中执行了哪些插件目标。命令行
2. 自定义绑定:
除了内置绑定外,用户还可以本身选择将某个插件目标绑定到生命周期的某个阶段上,这种自定义绑定方式能让Maven项目在构建过程当中执行更多更富特点的任务。
一个常见的例子是建立项目的源码jar包,内置的插件绑定关系中并无涉及这一任务,所以须要用户自行配置。maven-source-plugin能够帮助咱们完成该任务,它的jar-no-fork目标可以将项目的主代码打包成jar文件,能够将其绑定到default生命周期的verify阶段上,在执行完集成测试后和安装构件以前建立源码jar包,具体配置以下:
<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>
它会建立一个以-sources.jar结尾的源码文件包。
有不少插件的目标在编写时已经定义了默认绑定阶段,可使用maven-help-plugin查看插件详细信息,了解插件目标的默认绑定阶段:
mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1-Ddetail