最近工作做中需要利用maven在编译打包的时候增加自定义的校验,如果引入了特定的包要生成非法引用报告。研究过后准备使用maven-checkstyle-plugin插件来进行开发。参考了官方的说明,但是说的不是很明白,故在此以自己的角度进行整理总结。 官方参考文档如下:
<font color=red >PS:本文档只描述在工程pom文档里进行install时的配置开发说明;因为网上很多例子,插件执行执行的方式不在此赘述。</font>
本文档版本依赖
<dependency>
<groupId>com.puppycrawl.tools</groupId>
<artifactId>checkstyle</artifactId>
<version>7.3</version>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>2.17</version>
</plugin>
开发自定义校验规则
新建maven工程,该工程内开发自己的maven插件检验规则代码。<font color=red >校验规则:不允许在业务工程中直接引入com.alibaba.fastjson包</font>
先写一个简单的具体实现
package net.genez.customck.check;
import com.puppycrawl.tools.checkstyle.api.AbstractCheck;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import com.puppycrawl.tools.checkstyle.api.FullIdent;
import com.puppycrawl.tools.checkstyle.api.TokenTypes;
public class ImportCheck extends AbstractCheck {
//本校验器默认接收的ast类型
public int[] getDefaultTokens() {
return new int[] {TokenTypes.IMPORT, TokenTypes.STATIC_IMPORT};
}
public void visitToken(DetailAST ast) {
if (ast.getType() == TokenTypes.IMPORT || ast.getType() == TokenTypes.STATIC_IMPORT){
final FullIdent name = FullIdent.createFullIdentBelow(ast);
if(name.getText().startsWith("com.alibaba.fastjson")){
//输出到report的描述
log(ast.getLineNo(),"不允许直接使用com.alibaba.fastjson");
}
}
}
}
pom文件引用
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w