0
点赞
收藏
分享

微信扫一扫

Maven的生命周期及插件开发

ZGtheGreat 2022-02-13 阅读 101
maven

文章目录

生命周期

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


每个生命周期包含一些阶段(phase),这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和maven最直接的交互方式就是调用这些生命周期阶段。
在这里插入图片描述
如上图我们在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默认的各阶段对应的插件列表,展示了生命周期与插件的相互绑定关系

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



插件开发

清楚了上述的Maven的生命周期与插件的关系后,我们自己也可以自定义插件,来扩展maven的功能,首先我们需要maven插件开发所需的插件,如下:

<!-- https://mvnrepository.com/artifact/org.apache.maven/maven-plugin-api -->
<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-plugin-api</artifactId>
    <version>3.0</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.maven.plugin-tools/maven-plugin-annotations -->
<dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <version>3.4</version>
    <scope>provided</scope>
</dependency>

然后新建一个maven项目中,引入上述的依赖,另外需要注意的是,pom.xml文件的<packaging>类型,如下:
在这里插入图片描述
PS:为了方便代码管理,我们将插件模块和测试模块放在了同一个父项目之下,当然也可以不作为子项目,分为两个maven项目也可。
(该父项目是一个普通的maven项目,之前测试中发现若父项目是一个SpringBoot项目时,在添加maven-plugin</packaging>插件项目后,maven打包安装及测试时,虽然都没有问题,不过就是在打包完成时IDEA会闪退重启,改为继承普通maven父项目后,该问题消失)


然后就可以创建一个类使其继承AbstractMojo类,在其中就可以实现相关的功能,这里我们打印一行简单的日志来进行测试,如下:
在这里插入图片描述

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

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


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

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

当然在这使用,也是可以指定其参数的,如下:
在这里插入图片描述
在这里插入图片描述

举报

相关推荐

0 条评论