【云原生技术】一份小 XML + 一行 sonar 属性,即可把被插件排除的规则重新拉进你的扫描流程。

一份小 XML + 一行 sonar 属性,即可把被插件排除的规则重新拉进你的扫描流程。

以下步骤全部在 5 分钟内就能完成,并且不需要改动插件源码、也不需要写 Java 代码。

==================================================

1. 写一份最小化 PMD ruleset XML

==================================================
在任意目录(推荐放到版本库,例如 build/sonar/pmd/ 下面)新建文件 pmd-extra.xml:

<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="Extra-Rules"
         xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0
                             https://pmd.github.io/pmd-6.55.0/ruleset_xml_schema.xsd">

  <description>Bring back BigDecimalInstantiation that is excluded by default</description>

  <!-- ① 直接引用 PMD 官方分类文件 + 规则名 -->
  <rule ref="category/java/design.xml/BigDecimalInstantiation">
      <!-- ② 若要改参数、严重度,可在这里添加
      <priority>2</priority>               -- 1=Blocker … 5=Info
      <properties>
          <property name="violateConstructor" value="true"/>
          <property name="violateStaticMethod" value="true"/>
      </properties>
      -->
  </rule>
</ruleset>

说明
• 只引用了条规则,如需更多就在同个 ruleset 里继续 。
• 文件名和路径完全自由;SonarQube 不要求放到固定目录。

==================================================

2. 告诉 sonar-pmd-plugin 去加载这份文件

==================================================
有三种等价方式,任选其一即可——

❶ 在项目级别(最常见)
把路径写进 sonar-project.properties 或 pom.xml/gradle.properties 里:

# 如果文件和 sonar-project.properties 在同一目录,可用相对路径
sonar.pmd.ruleSets=build/sonar/pmd/pmd-extra.xml

❷ 在 CLI 临时指定(适合偶尔试验)

sonar-scanner \
  -Dsonar.projectKey=my-app \
  -Dsonar.pmd.ruleSets=build/sonar/pmd/pmd-extra.xml

❸ 在服务器全局生效
Administration ▶ General Settings ▶ PMD ▶ RuleSets
填绝对路径或 file:// URL,例如

/opt/sonar/rules/pmd-extra.xml

对所有项目都有效;路径必须对 SonarQube Server 进程可见。

注意
• 可以同时列多个 XML,用逗号分隔:
sonar.pmd.ruleSets=r1.xml,r2.xml
• 如果设置了项目级属性,会覆盖(而不是追加)全局设置。

==================================================

3. 重新执行一次扫描

==================================================
执行 Sonar Scanner(Maven sonar:sonar、Gradle sonar、独立 CLI 皆可)。
在扫描日志里能看到类似行,说明自定义 ruleset 已被加载:

INFO  PMD: Loading ruleset from file: /path/to/pmd-extra.xml

扫描完后,进入 Issues 或 Pull Request 即可看到:

• new BigDecimal(…double/float…)
• BigDecimal.valueOf(double/float)

都会被标记为 Major (Code Smell)。

==================================================

4. 常见疑问

==================================================
Q1. 路径是给 Server 还是给 Scanner?
答:sonar.pmd.ruleSetsScanner 读取并发送给 Sever,所以路径要对 Scanner 进程可见(通常就是你运行构建的那台机器)。Server 不会再去访问文件。

Q2. 可以把规则改成 Blocker 级吗?
答:可以。在 里加 1 即可(1=Blocker,2=Critical…)。

Q3. 这条规则跟 SonarJava S2111 重复吗?
答:S2111 只检查构造函数;BigDecimalInstantiation 同时检查 valueOf。两者重叠部分(constructor)可能报告 2 条 issue,可在 Quality Profile 里把 S2111 禁掉,或通过 “Merge Duplicates” 功能合并。

就这么简单:一份小 XML + 一行 sonar 属性,即可把被插件排除的规则重新拉进你的扫描流程。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿寻寻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值