Maven的生命周期和插件开发

Maven有三套相互独立的生命周期,分别是clean、default 和 site。clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而site生命周期的目的是建立项目站点。


每个生命周期包含一些阶段(phase),这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和maven最直接的交互方式就是调用这些生命周期阶段。

Maven的生命周期和插件开发_第1张图片

如上图我们在mvn命令中也说了,其执行运行的阶段说明,这里再以clean生命周期为例,它包含的阶段有:pre-clean,clean和post-clean。

  • 当用户调用pre-clean的时候,只有pre-clean阶段得以执行;
  • 当用户调用clean的时候,pre-clean和clean阶段会得以顺序执行;
  • 当用户调用post-clean的时候,pre-clean,clean和post-clean会得以顺序执行。

较之于生命周期阶段的前后依赖关系,三套生命周期本身是相互独立的,用户可以仅仅调用clean生命周期的某个阶段,或者仅仅利用调用default生命周期的某个阶段,而不会对其它生命周期产生任何影响。

例如,当用户调用clean生命周期的clean阶段的时候,不会触发default生命周期的任何阶段,反之亦然。当用户调用default生命周期的compile阶段的时候,也不会触发clean生命周期的任何阶段。




上图中我们提到过maven只定义生命周期,具体的执行交由plugin插件来完成,所以插件plugin是绑定到生命周期,承担实际功能的组件。mvn运行时,自动关联插件来运行。


下图是maven默认的各阶段对应的插件列表,生命周期与插件的相互绑定关系

生命周期 生命周期阶段 插件目标 执行任务
clean pre-clean 执行一些清理前需要完成的工作
clean maven-clean-plugin:clean 删除项目的输出目录,即清理上一次构建生成的文件
post-clean 执行一些清理后需要完成的工作
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(ejb:ejb jar:jar rar:rar war:war) 创建项目jar包
install maven-install-plugin:install 将项目输出构件安装到本地仓库
deploy maven-deploy-plugin:deploy 将项目输出构件部署到远程仓库
site pre-site 执行一些在生成项目站点之前需要完成的工作
site maven-site-plugin:site 生成项目站点文档
post-site 执行一些在生成项目站点后需要完成的工作
site-deploy maven-site-plugin:deploy 将生成的项目站点发布到服务器上



清楚了上述的Maven的生命周期与插件的关系后,我们自己也可以自定义插件,来扩展maven的功能
Maven的生命周期和插件开发_第2张图片

插件的主要步骤如上图大致所示,我们就来实现一个简单的Maven插件,其项目如下:
Maven的生命周期和插件开发_第3张图片

首先我们新建了一个mavenplugin插件项目,其中主要就是MyPlugin类,继承了AbstractMojo类可以实现相关的功能,这里就是简单的打印日志


在该mavenplugin项目中,我们需要引入相关的依赖,另外需要注意的是,pom文件的类型,如下:
Maven的生命周期和插件开发_第4张图片


然后我们就可以执行mvn clean install 将其安装到本地仓库中,然后我们就可以来执行上述插件了,如下:
在这里插入图片描述
在这里插入图片描述


当然在MyPlugin插件方法中,我们设置了参数,这里执行也是可以传入参数的,如下:
在这里插入图片描述
在这里插入图片描述



经过上述测试,我们发现我们自定义的插件是可以正常使用的,那么我们就来在另外一个demo模块项目中进行使用,这里我们需要在demo项目的pom文件进行执行,并且需要关联相关的Maven生命周期,如下:
Maven的生命周期和插件开发_第5张图片

如上图我们绑定的是Maven的default周期中的compile阶段,所以只要在指定default周期中compile阶段及其之后的命令,该插件就会被执行。
Maven的生命周期和插件开发_第6张图片
在这里插入图片描述

上述我们执行 mvn compile 命令,自定义插件就执行了,当然我们如果执行之后的 package 、install 等命令,插件都会被执行。如果执行compile之前的命令,如 process-resources 等,或者执行clean之类的,该插件则不会执行。



另外在这其中,我们也是可以指定其参数的,如下:
Maven的生命周期和插件开发_第7张图片
在这里插入图片描述

你可能感兴趣的:(Maven)