自定义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比较方便:
然后执行打印:
在这里插入图片描述

posted @ 2020-01-05 14:53  你就像甜甜的益达  阅读(140)  评论(0编辑  收藏  举报