自定义SonarQube Java规则
创始人
2024-04-04 15:07:12
0

自定义SonarQube扫描Java Rule


在介绍如何自定义规则之前,先介绍一下这几个产品:

  • SonarQube 代码质量管理平台
  • PMD 源代码分析器
  • FindBugs Java源代码分析器,查找代码Bug
  • Sonar-PMD Sonar市场提供的PMD插件开源项目
  • P3C Alibaba的代码规范,提供了IDEA、Eclipse和PMD三个版本

虽然开源平台已经帮我们提供众多的Java安全和代码Bug的校验规则(如:P3C、PMD、FindBugs、Sonar Way),但是这些可能仍然无法满足公司对于代码的校验,例如:公司规定不得以老板的姓名作为变量名(类似的需求);因此我们不得不按照老板的规定,来扫描同事们的代码。如何来定义一个自己的Java规范呢,Sonar文档中已有说明:Sonar Doc

按照文档说明,我们应该从头开始开发一个Sonar插件,这显然是非常耗时的,因此我们直接Fork Sonar-PMD 进行修改只需要集成自定义的规则即可。接下来我们就直接进入实操环节,我们以不能将变量定义为password为例。因设计规则需要XPath,请自行学习。

开发一条PMD的规则步骤如下:

1. 设计规则

因为我们使用的源码分析器是PMD,因此我们需要使用PMD的规则设计方式,参考文档:PMD 规则设计
PMD的规则设计器可以帮助我们辅助分析AST 可视化的规则设计器

2. 编写规则

将设计器里的规则copy出来,我们设计为Xpath或使用Java代码分析AST。
我们以不能将变量名称定义为password为例:

  • Xpath定义方式
//VariableDeclaratorId[@Image = "password"]
  • Java代码定义方式
public class DontDefinePasswordRule extends AbstractJavaRule{@Overridepublic Object visit(ASTVariableDeclaratorId node, Object data) {if ("password".equalsIgnoreCase(node.getName()) ) {// reports a violation at the position of the node// the "data" parameter is a context object handed to by your rule// the message for the violation is the message defined in the rule declaration XML elementaddViolation(data, node);}return super.visit(node, data);}}

3. 配置Rule

我们可以根据规则的分类,为不同的规则建立不同的规则文件,例如示例的这个配置文件:src\main\resources\rulesets\java\myrule-other.xml

  • Java代码配置方式
Do not define a variable named password1

  • XPath配置方式
 
If an abstract class does not provides any methods, it may be acting as a simple data container
that is not meant to be instantiated. In this case, it is probably better to use a private or
protected constructor in order to prevent instantiation than make the class misleadingly abstract.1


4. 配置规则查找的文件

配置文件地址:src\main\resources\org\sonar\plugins\pmd\rules-myrule.xml

MAJOR

5. 配置规则属性

配置文件地址:src\main\resources\org\sonar\l10n\pmd.properties

rule.pmd.DontDefinePasswordRule.name=[myrule]Do not define a variable named password.

6. 配置规则示例

配置文件地址:src\main\resources\org\sonar\l10n\pmd\rules\pmd-myrule
每个规则一个html文件

Do not define a variable named password. Examples:
private String pwd;

7. 配置PMD model文件

配置文件地址:src\main\resources\com\sonar\sqale\pmd-model.xml
在最后的Myrule PMD中添加clc

pmdDontDefinePasswordRuleremediationFunctionCONSTANT_ISSUEoffset2min

相关内容

热门资讯

华谊兄弟深陷法律与财务漩涡 近日,中国影视巨头华谊兄弟及其创始人深陷法律与财务漩涡。 据天眼查官网显示,近日华谊兄弟旗下两家核心...
如何将制度优势变为“现金流”?... 2025年12月18日,海南全岛封关运作正式启动。这一天,被有意地与47年前——1978年12月18...
北京警方:5名犯罪嫌疑人均已抓... 导 读 “就剐蹭了一下,居然要我赔10万?” 近日,北京海淀警方经过侦查打掉一个做局“碰瓷”的敲诈勒...
锂矿龙头涉嫌内幕交易罪单位犯罪... 【大河财立方消息】12月29日,赣锋锂业发布公告,公司于当日收到宜春市公安局的移送起诉告知书,因涉嫌...
赣锋锂业:2025年涉内幕交易... 【赣锋锂业因涉嫌内幕交易罪被移送起诉】12月29日,赣锋锂业(002460.SZ)公告透露,2025...
严重职务违法、涉嫌受贿犯罪!许... 【导读】中国工商银行云南省分行原党委书记、行长许海被开除党籍 中国基金报记者 晨曦 又有国有大行干部...
《安顺市黄果树旅游景区建设促进... 人民网安顺12月29日电 (记者王秀芳)12月29日,记者从安顺市相关新闻发布会上获悉,《安顺市黄果...
涉嫌内幕交易罪单位犯罪,赣锋锂... 12月29日,赣锋锂业(002460.SZ)公告称,公司于2025年12月29日收到宜春市公安局的移...
学前儿童学籍管理出台新政策,教... 近日,教育部印发了《全国学前儿童学籍管理办法(试行)》(以下简称《办法》)。教育部基础教育司负责人就...
华测检测:关注国家区域发展战略... 有投资者在互动平台向华测检测提问:“请问海南封关后对贵公司在海南的进出口商品检验检疫订单增长是否有帮...