自己写一个Maven plugin

一、如何手写一个maven plugin

maven plugin的作用就是在maven生命周期的某一个阶段去完成一个事情。

1.maven生命周期(lifecycle)中的每个阶段(phase)都可以绑定n(>=1)个插件(plugin)的目标(goal)

maven官方文档对生命周期和阶段的介绍

maven生命周期与阶段

2.多个goal绑定同一个phase的话,maven会从上到下依次执行

3.一个plugin中可以包含多个goal

4.maven插件的命名规则:maven-xxx-plugin xxx-maven-plugin(spring喜欢这种风格)

5.如何在idea中调试maven插件:如何调试maven插件

1.1 maven插件的前置准备工作

第一步:maven插件pom文件需要修改打包方式

maven-plugin

第二步:引入依赖


    
    
        org.apache.maven
        maven-plugin-api
        3.5.2
    
    
    
    
        org.apache.maven.plugin-tools
        maven-plugin-annotations
        3.5.2
    
    
    
    
        org.apache.maven.plugins
        maven-plugin-plugin
        3.5
    
    
    
    
        org.apache.maven
        maven-project
        2.2.1
    

第三步:在build文件中引用插件描述信息依赖

    
        
            
            
                org.apache.maven.plugins
                maven-plugin-plugin
                3.5
            
        
    

1.2 实现方式

1.2.1 注释方式实现(不推荐,已经废弃)

在注解里面写@goal 就会被识别到

/**
 * @goal comment
 * @version 1.0.0
 * @since 1.0.0
 * 注意:注释的方式不能与注解方式混用
 */
public class CommentMoJo extends AbstractMojo {
    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        Log log = getLog();
        log.info("执行了goal:comment的execute方法");
    }
}

1.2.2 注解方式实现

@Mojo注解的name就是goal的名字,defaultPhase设置默认绑定的phase,不写默认是package

@Mojo(name = "annotation", defaultPhase = LifecyclePhase.PACKAGE)
public class AnnotationMoJo extends AbstractMojo {


    @Parameter(defaultValue = "${project}")
    private MavenProject project;


    @Parameter(required = true)
    private String name;


    @Parameter(required = false)
    private String age;
    @Override
    public void execute() throws MojoExecutionException, MojoFailureException {
        Log log = getLog();
        log.info("执行了goal:annotation的execute方法");
        // 获取到最终jar包的名字
        String packaging = project.getPackaging();
        String finalName = project.getBuild().getFinalName();
        log.info("获取到最终jar包的名字:"+finalName+"."+packaging);
        log.info("name的值:"+name);
        log.info("age的值:"+age);
    }
}

获取里面的参数配置

   // 获取maven pom文件上下文
    @Parameter(defaultValue = "${project}")
    private MavenProject project;


    // required = true代表这个参数是必须的
    @Parameter(required = true)
    private String name;


    @Parameter(required = false)
    private String age;

插件打包

自己写一个Maven plugin_第1张图片

1.3 在项目中使用maven plugin


        
            
                com.example
                mavenplugin
                0.0.2-SNAPSHOT
                

                    cgy
                
                
                    
                        comment
                        package
                        
                            comment
                        
                    
                    
                        anno

                        package

                        
                            annotation
                        
                    
                



                
                    
                        commons-io
                        commons-io
                        2.13.0




                    
                
            
            




            
            
                org.springframework.boot
                spring-boot-maven-plugin
                2.6.11
                
                    
                        repackage
                        package
                        
                            repackage
                        
                    
                
            
        
    

1.4 查看maven生成的plugin.xml

这里有一个spring的打包插件

            
                org.springframework.boot
                spring-boot-maven-plugin
                2.6.11
                
                    
                        repackage
                        package
                        
                            repackage
                        
                    
                
            

alt+点击`repackage`可以查看这个goal生成的plugin.xml文件

自己写一个Maven plugin_第2张图片

1.5 plugin的依赖

当插件的依赖不能传递时需要使用方显式的引入依赖。

    
        commons-io
        commons-io
        2.13.0
        
        provided
        
        true
    

自己写一个Maven plugin_第3张图片

二、idea里面的maven插件含义

idea的maven插件

自己写一个Maven plugin_第4张图片

三、 常用的插件

一般我们写java项目只需要用一个打包插件即可,我们通常使用`spring-boot-maven-plugin`和`maven assembly plugin`这两个插件

[spring-boot-maven-plugin介绍](https://zhuanlan.zhihu.com/p/634098705)

[maven-assembly-plugin插件的使用方法](https://cloud.tencent.com/developer/article/1354070)

[maven-assembly-plugin插件的官方使用方法](https://maven.apache.org/plugins/maven-assembly-plugin/usage.html)

[maven-assembly-plugin插件的assembly文件官方介绍](https://maven.apache.org/plugins/maven-assembly-plugin/assembly.html)

[自己写一个maven插件](https://www.bilibili.com/video/BV1au4y1e7rE?p=1&vd_source=e11238cac9f3e1ba071805e0deee4e23)

其他资料:

java编译加速那些事

你可能感兴趣的:(maven,java,开发语言)