Idea开发maven插件

2022-08-11 17:06:58 浏览数 (1)

今天又是远程上班,早上起来没啥事写一篇博客吧。咋就把这个写文章当干饭一样,写一篇就是一篇。今天我们来学一下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插件了,大家闲了可以实践一下。

早~

0 人点赞