今天又是远程上班,早上起来没啥事写一篇博客吧。咋就把这个写文章当干饭一样,写一篇就是一篇。今天我们来学一下maven插件的开发,首先说一下maven有什么用吧,我们知道maven有clean、build、package、install、deploy等过程。也就是说我们做maven插件无非就是想在maven流程中加入自己的一些东西,比如如果项目中用到了checkstyle做代码校验这种场景,除此之外还有maven插件独立运行的情况,比如mybatis逆向生成mapper的时候是独立于maven流程之外的存在,需要我们自己手动去触发。目前作者知道的就这两种插件模式。总结一下就是内嵌于maven的主流程的插件,再或者独立运行的maven插件。这块我们将两者都演示一下。
1.在idea创建maven工程,项目模板选择mojo
项目创建好之后,我们删除自动生成的Mojo类。我们看到生成的mojo类继承了AbstractMojo类。所以说呐,我们开发插件也必然是通过重写Abstractmojo类的方法实现的。我们重新定义mojo类,然后变成这样。
代码语言:javascript复制 @goal CustomMavenMojo:表示该插件的服务目标
@phase compile:表示该插件的生效周期阶段
@requiresProject false:表示是否依托于一个项目才能运行该插件
@parameter expression="${name}":表示插件参数,使用插件的时候会用得到
@required:代表该参数不能省略
当然这块的注解还有很多,基本这些就满足日常使用了。
代码语言:javascript复制maven install
在我们的目标项目中,我们引入这个插件。
引入插件之后,我们执行一下这里的maven指令。
这块我们的目标就达成了。
但是如果我们想让我们的插件在maven的生命周期内执行怎么做呐?这块我们应该在maven插件中指定插件执行的阶段。
代码语言:javascript复制 <plugin>
<groupId>org.example</groupId>
<artifactId>TestMojo</artifactId>
<version>2</version>
<configuration>
<name>tianjingle</name>
</configuration>
<executions>
<execution>
//在install阶段执行
<phase>install</phase>
<goals>
//这块可以添加多个
<goal>tianjingle</goal>
</goals>
</execution>
</executions>
</plugin>
在指定了执行的阶段之后,我们随便指定指定的阶段,发现我们的插件并没有执行哦。
我们再用install来测试一下。
至此我们开头说的maven插件的两个功能已经完成了,因为插件的开发很简单。所以这块也不知道总结个啥了。这个maven插件主要用于对项目进行一些统一的修改。之前说的那两个场景,还有其他的各种插件,比如数据库sql管理的那些插件,这块作者也忘了名字叫啥了。
当然我们这块实现插件使用@注释的方式,其实还有更现代化的方式,也就是去@注释,采用@注解。这块需要引入maven依赖。
代码语言:javascript复制 <dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>3.0.8</version>
</dependency>
相关的代码改造为:
代码语言:javascript复制@Mojo(name = "tianjingle") //相当于@goal注释
public class TestMojo extends AbstractMojo {
//相当于@parameter注释
@Parameter(readonly = false,defaultValue = "tianjingle",property = "name")
private String name;
public void execute() throws MojoExecutionException, MojoFailureException {
System.out.println("test mojo .....");
System.out.println("---" name);
}
}
文章到这里呐,我们就基本会开发maven插件了,大家闲了可以实践一下。
早~