阿里代码规范开源地址:https://github.com/alibaba/p3c.git
2.代码实现扩展自定义规则需要修改p3c-pmd项目,直接用idea打开该项目即可
2.1 具体规则检测实体类是否实现Serializable接口
1.首先要判断哪些类是实体类
2.判断实现的接口是否包括Serializable,不包括则提醒
在rule包目录下p3c-pmd/src/main/java/com/alibaba/p3c/pmd/lang/java/rule,新增myrule包,并且新增规则类PojoMustImplementsSerializableRule,需要继承AbstractAliCommentRule
package com.alibaba.p3c.pmd.lang.java.rule.myrule;
import com.alibaba.p3c.pmd.I18nResources;
import com.alibaba.p3c.pmd.lang.java.rule.comment.AbstractAliCommentRule;
import com.alibaba.p3c.pmd.lang.java.util.ViolationUtils;
import net.sourceforge.pmd.lang.java.ast.*;
import java.util.List;
public class PojoMustImplementsSerializableRule extends AbstractAliCommentRule {
private final String POJO_PACKAGE_NAME = ".pojo";
private final String SERIALIZABLE_NAME = "Serializable";
private boolean pojoCheck = false;
private boolean hasSerializable=false;
@Override
public Object visit(ASTPackageDeclaration decl, Object data) {
if(decl.getPackageNameImage().contains(POJO_PACKAGE_NAME)){
pojoCheck=true;
}
return super.visit(decl, data);
}
@Override
public Object visit(ASTClassOrInterfaceDeclaration decl, Object data) {
if(pojoCheck) {
List nodes = decl.getSuperInterfacesTypeNodes();
for (ASTClassOrInterfaceType interfaceType : nodes) {
if (SERIALIZABLE_NAME.equals(interfaceType.getImage())) {
hasSerializable = true;
break;
}
}
if(!hasSerializable){
ViolationUtils.addViolationWithPrecisePosition(this, decl, data,
I18nResources.getMessage("java.myrule.PojoMustImplementsSerializableRule.rule.msg",decl.getImage()));
}
}
return super.visit(decl, data);
}
}
2.3 配置提醒消息
修改p3c-pmd/src/main/resources/messages.xml
注意可以需要和java代码中的配置消息对应
2.4 配置规则
p3c-pmd/src/main/resources/rulesets/java 目录下新增规则配置ali-myrule.xml
一对表示一个规则,可配置多条
language配置java
class需要配置新增的类全路径
priority配置提醒等级
3 更新插件包并检测MyRules java.myrule.PojoMustImplementsSerializableRule.rule.desc 3
打包得到p3c-pmd-2.1.1.jar
本人使用idea,找到阿里代码检测插件安装目录,本机路径
C:UsersSDLYJAppDataRoamingJetBrainsIntelliJIdea2021.2pluginsAlibaba Java Coding Guidelineslib
替换对应jar包,替换需要关闭idea
注意:同时需要修改p3c-common-2.0.1.jar中的配置文件
rulesets/java/ali-pmd.xml
增加新增的规则配置xml
更新重启idea后新增类可看到效果



