自定义SonarQube Java规则

本文档介绍了如何自定义SonarQube扫描Java的规则,主要使用PMD进行开发。首先,文章提到了SonarQube、PMD、FindBugs等代码质量分析工具,然后详细阐述了开发自定义PMD规则的7个步骤,包括设计规则、编写规则、配置规则等。通过自定义规则,可以满足特定的代码规范需求,如避免使用特定词汇作为变量名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义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{
   

	@Override
	public 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 element
            addViolation
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值