本文环境基于:
Maven 3.6.2
Java 1.8
idea 2019.1
最近觉得mybatis-generator生成插件生成的注释太过于繁琐,所以下载了源码来研究,想通过修动源码定制符合需要的生成工具,所以查阅资料先对Maven插件的开发流程有所了解,后续便于源码的改动,废话不多说,直接上流程:
第一步:
iddea创建一个mojo项目,如图:
然后设置好 groupId artifactId 一路next
第二步:
插件的开发需要引入相关依赖:
<dependencies>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.6.3</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.6.0</version>
<scope>provided</scope>
</dependency>
第三步:
编写插件执行的具体逻辑:
该类需要继承AbstractMojo并实现 execute方法
@Mojo指定执行命令
@Parameter 接收命令参数
package com.suancai.plugins;
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.util.ArrayList;
import java.util.List;
/**
* @Author Bruce
* @Date: 2020/3/8 9:38
* @Description 统计项目特定文件的个数
*/
@Mojo(name="filecount",defaultPhase = LifecyclePhase.PACKAGE)
public class FileCountPlugin extends AbstractMojo {
/**
* 文件列表
*/
private static List<String> fileList = new ArrayList<String>();
/**
* 获取的相关基本目录
*/
@Parameter
private String baseDir;
/**
* 定义文件后缀 默认统计java文件 命令行传参可 mvn clean -Dsuffix=.xml
*/
@Parameter(property = "suffix",defaultValue = ".java")
private String suffix;
public void execute() throws MojoExecutionException, MojoFailureException {
List<String> fileList = scanFile(baseDir);
getLog().info("filePath: "+ baseDir);
getLog().info("fileSuffix: "+ suffix);
getLog().info("fileTotal: "+fileList.size());
}
/**
* 递归统计文件,并将符合条件的文件放入集合中
* @param filePath
* @return
*/
private List<String> scanFile(String filePath){
File dir = new File(filePath);
// 递归查找所有文件
for (File file : dir.listFiles()) {
if (file.isDirectory()){
scanFile(file.getAbsolutePath());
} else {
if (suffix != null && !"".equals(suffix)){
if (file.getName().endsWith(suffix)){
fileList.add(file.getName());
}
}
}
}
return fileList;
}
}
第四步:
命令窗口执行 mvn clean install 保证插件可以成功加到本地仓库,
或者可以用idea的可视化操作install到本地仓库
第五步:
在另一项目或者新项目的pom文件中添加引用:
<plugin>
<groupId>com.suancai.plugins</groupId>
<artifactId>file-count</artifactId>
<version>1.0-SNAPSHOT</version>
<configuration>
<baseDir>${basedir}</baseDir>
</configuration>
<executions>
<execution>
<!-- 运行在哪个阶段 -->
<phase>clean</phase>
<goals>
<!--标识运行哪个命令-->
<goal>filecount</goal>
</goals>
</execution>
</executions>
</plugin>
注:此处注意大小写baseDir否则会找不到
第五步:
命令窗口执行 mvn clean -Dsuffix=.txt 查看结果
注:idea 此处可以将命令安装到启动命令设置中也是可以的