zoukankan      html  css  js  c++  java
  • 自定义maven插件

    maven插件介绍

    maven插件有很多的作用,maven插件简介
    说个用的比较多的,就是jetty插件,通过配置jetty可以通过插件一键运行代码,测试部署代码更加简单了.还有很多,打包插件啊,部署插件啊等等…

    自定义插件

    我们可以通过自定义插件来完成自己想要的一些功能,举个例子,通过插件来查看项目有多少文件,文件行数.
    首先建个项目;
    引入依赖,这两个依赖maven包的,就不用解释了,引入就对了,需要其他功能也可以引入其他包:

        <dependencies>
    
            <dependency>
                <groupId>org.apache.maven</groupId>
                <artifactId>maven-plugin-api</artifactId>
                <version>3.5.2</version>
                <exclusions>
                    <exclusion>
                        <artifactId>plexus-utils</artifactId>
                        <groupId>org.codehaus.plexus</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.apache.maven.plugin-tools</groupId>
                <artifactId>maven-plugin-annotations</artifactId>
                <version>3.5.2</version>
                <scope>provided</scope>
                <exclusions>
                    <exclusion>
                        <artifactId>maven-artifact</artifactId>
                        <groupId>org.apache.maven</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
    
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-plugin-plugin</artifactId>
                    <version>3.5.2</version>
                    <!-- 插件执行命令前缀 -->
                    <configuration>
                         <goalPrefix>goalPrefix</goalPrefix>
                         <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
                    </configuration>
                </plugin>
    
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.1</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
    
            </plugins>
    
        </build>
    

    然后编写具体功能实现类,其实有两种方式实现,一种通过注解,还有一种通过文档方式,文档方式用的不多,就略过,感兴趣可以去网上查看:

    
    import org.apache.maven.plugin.AbstractMojo;
    import org.apache.maven.plugin.MojoExecutionException;
    import org.apache.maven.plugin.MojoFailureException;
    import org.apache.maven.plugins.annotations.LifecyclePhase;
    import org.apache.maven.plugins.annotations.Mojo;
    import org.apache.maven.plugins.annotations.Parameter;
    
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.LineNumberReader;
    
    @Mojo(name = "cesi", defaultPhase = LifecyclePhase.PACKAGE)
    public class TestPlugin extends AbstractMojo {
        @Parameter(property = "application")
        private String application;
    
        @Parameter(property = "sourceFolderPath")
        private String sourceFolderPath;
    
        @Parameter(property = "username")
        private String username;
    
        @Override
        public void execute() throws MojoExecutionException, MojoFailureException {
            System.out.println("-----execute----");
            System.out.println("应用名称:" + application);
            System.out.println("工程应用路径:" + sourceFolderPath);
            System.out.println("传入的username参数:" + username);
    
            listAllFiles(new File(sourceFolderPath + "\src"));
            System.out.println("总文件个数为:" + count);
            System.out.println("总行数为:" + lineCount);
    
        }
    
        static int count = 0;
        static int lineCount = 0;
    
        //获取文件列表(递归)
        public static void listAllFiles(File file) {
            if (file.isFile()) {
                count++;
                long lineNumber = getLineNumber(file);
                lineCount += lineNumber;
                System.out.println(file + "---行数:" + lineNumber);
            } else {
                if (file.exists() && file.isDirectory()) {
                    File[] files = file.listFiles();
                    for (File file1 : files) {
                        listAllFiles(file1);
                    }
                }
            }
        }
    
        //获取文件行数
        public static long getLineNumber(File file) {
            if (file.exists()) {
                try {
                    FileReader fileReader = new FileReader(file);
                    LineNumberReader lineNumberReader = new LineNumberReader(fileReader);
                    lineNumberReader.skip(Long.MAX_VALUE);
                    long lines = lineNumberReader.getLineNumber() + 1;
                    fileReader.close();
                    lineNumberReader.close();
                    return lines;
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return 0;
        }
    
    }
    

    项目进行编译打包

    使用

    在另外一个工程里面引入我们自定义的插件,在pom里面:
    build下面的plugins下面加上:

    <plugin>
                    <!--引入刚刚的插件依赖-->
                    <groupId>cn.migu.yida</groupId>
                    <artifactId>yida-maven-plugin2</artifactId>
                    <version>1.0.0-SNAPSHOT</version>
                    <!-- 这里加入的是相关参数,这些参数必须跟插件实现里面的属性保持一致 -->
                    <configuration>
                        <application>test</application><!-- 当前应用名称 -->
                        <sourceFolderPath>${basedir}</sourceFolderPath>
                        <username>aaaa</username>
                    </configuration>
    
                </plugin>
    

    然后等idea导入完成就可以看见:
    在这里插入图片描述

    运行

    然后在cesi上面鼠标右键可以运行,当然也可以debug的,我这两个项目在同一个项目下,不同的模块下,就可以直接debug比较方便:
    然后执行打印:
    在这里插入图片描述

    世界上所有的不公平都是由于当事人能力不足造成的.
  • 相关阅读:
    Spring @ContextConfiguration注解
    【Spring】Junit加载Spring容器作单元测试(整理)
    RestTemplate使用教程
    Linux下Maven私服Nexus3.x环境构建操作记录
    Maven 的 classifier 的作用
    Maven 教程(22)— Maven中 plugins 和 pluginManagement
    IOC给程序带来的好处
    Java NIO原理图文分析及代码实现
    Hadoop的RPC机制源码分析
    Flume之核心架构深入解析
  • 原文地址:https://www.cnblogs.com/javayida/p/13346783.html
Copyright © 2011-2022 走看看