使用 SonarQube 如何实现 java 导入黑名单?

Using SonarQube how would one implement a java import blacklist?

使用 SonarQube(3.0 版)我正在尝试实施 java 库的黑名单。例如,我希望 SonarQube 为任何包含 org.apache.lang.StringUtils

导入的 java 文件生成代码气味

我确实找到了这条规则:"Track uses of disallowed dependencies" 但是如前所述,我想重点关注 java 文件导入语句本身。例如

import org.apache.lang.StringUtils; // SonarQube should generate smell for this line
import java.awt.Component;

理想情况下,我想维护一个 deprecated/bug 导致导入的集中列表,该列表将涵盖以下用例:

您可能需要创建自定义规则,寻找特定的 fqcn 或包。以下是如何执行此操作的概述:https://docs.sonarqube.org/latest/extend/adding-coding-rules/ .

正在关注 David M. Karr's advice I looked through the custom rules documentation and found this template; Track uses of disallowed classes

打开此模板进行配置,会出现一条注释,说明规则参数(在本例中为 class 名称)允许使用正则表达式 - 并明确建议在定位包时使用正则表达式。

传递给 ClassName 参数的带有 org.apache.commons.lang.StringUtils 的自定义规则实现了问题中所述的预期结果。此外,可以使用 org.apache.commons.lang.*

定位整个包

TL;DR

在 SonarQube 仪表板中

  1. 点击主导航栏中的“规则”
  2. 搜索“跟踪使用不允许的 classes”
  3. Select 规则标记为“模板”
  4. 在屏幕底部点击“创建”
  5. 填写自定义规则配置表单,最重要的是使用完全限定的 class 例如 ClassName 字段org.apache.commons.lang.StringUtils 或使用正则表达式来定位整个包,例如org.apache.commons.lang.*
  6. Create/Save
  7. 将这个新的自定义规则添加到与目标项目关联的配置文件中,然后将其激活。 (我确定还有其他方法可以完成这一部分,这对我的小项目很有效,通过扩展 Java SonarWay 配置文件)