当前位置: 首页 > 知识库问答 >
问题:

SonarQube上不显示自定义PMD Java规则违规

姬雪松
2023-03-14

我试图在SonarQube上运行我的自定义PMD规则,但到目前为止,没有成功。

我创建了一个从sonar-pmd-plugin扩展的插件。在这个插件中,我有我的PMD规则集文件(custom_rules.xml)、一个声纳规则文件(pmd-extensions.xml)和我的自定义规则的Java类。

SonarQube识别了我的规则,我已经在默认的质量配置文件中启用了它们。最后,当我在给定的项目上运行声纳分析时,我看到我的自定义规则得到了正确的执行,并且它们在所分析的项目中发现了违规行为。

但是,Sonarqube上的项目仪表板上从未显示这些违规行为。

我使用的SonarQube版本是5.1.1。PMD插件的版本是2.4.1。我为这个问题创建了一个最小的示例,只有一个自定义规则。

custom_rules.xml:

<?xml version="1.0" encoding="UTF-8"?>
<ruleset name="My custom 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 http://pmd.sourceforge.net/ruleset_2_0_0.xsd">
    <rule 
        language="java"
        name="RuleJavaAssert"
        message="Avoid assert in production"
        class="br.gov.tcu.rules.RuleJavaAssert">
        <description>Production code should not use the assert command</description>
        <priority>3</priority>
    </rule>
</ruleset>
<rules>
    <rule>
        <key>br.gov.tcu.rules.RuleJavaAssert</key>
        <name>Avoid assert in production</name>
        <category name="Maintainability" />
        <priority>BLOCKER</priority>
        <description>Production code should not use the assert command</description>
        <configKey>br/gov/tcu/rules/custom_rules.xml/RuleJavaAssert</configKey>
    </rule>
</rules>
public class RuleJavaAssert extends AbstractJavaRule {

    @Override
    public Object visit(ASTAssertStatement node, Object data) {
        System.err.println("Found violation");
        addViolation(data, node);
        return super.visit(node, data);
    }
}
public class AssertViolation {

    public static void testMethod() {
        String test = "test";
        assert(test != null);
    }   
}
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building teste-pmd 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- sonar-maven-plugin:2.7.1:sonar (default-cli) @ teste-pmd ---
[INFO] User cache: D:\Users\x02315941199\.sonar\cache
[INFO] SonarQube version: 5.1.1
(...)
[INFO] [15:48:17.564] Sensor PmdSensor
[INFO] [15:48:17.564] Execute PMD 5.3.1...
[INFO] [15:48:17.580] Java version: 1.7
[INFO] [15:48:17.595] PMD configuration: D:\Users\x02315941199\Documents\PMD\workspace\teste-pmd\target\sonar\pmd.xml
Found violation
[INFO] [15:48:17.815] PMD configuration: D:\Users\x02315941199\Documents\PMD\workspace\teste-pmd\target\sonar\pmd-unit-tests.xml
[INFO] [15:48:17.815] Execute PMD 5.3.1 done: 251 ms
[INFO] [15:48:17.971] Sensor PmdSensor (done) | time=407ms
(...)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.185 s
[INFO] Finished at: 2015-11-11T15:48:19-02:00
[INFO] Final Memory: 72M/741M
[INFO] ------------------------------------------------------------------------

有什么想法吗?谢谢

共有1个答案

秦宁
2023-03-14

SonarQube不显示违规的原因是sonar-pmd-plugin中的违规记录器通过其关键字搜索规则。

因此,pmd-extensions.xml文件中的key属性必须等于custom_rules.xml中规则的name属性

通过将pmd-extensions.xml内容更改为:

<rules>
    <rule>
        <key>RuleJavaAssert</key>
        <name>Avoid assert in production</name>
        <category name="Maintainability" />
        <priority>BLOCKER</priority>
        <description>Production code should not use the assert command</description>
        <configKey>br/gov/tcu/rules/custom_rules.xml/RuleJavaAssert</configKey>
    </rule>
</rules>
 类似资料:
  • 我们在中基于BaseTreeVisitor实现了一个自定义规则https://github.com/SonarSource/sonar-java/tree/master/java-checks/src/main/java/org/sonar/java/checks如中所述http://docs.sonarqube.org/display/SONAR/Extending编码规则。我们能够部署它,它看

  • 我正在使用Sonarqube5.4来分析我自己的C#代码,分析工作与我预期的一样。现在我已经编写了一些自定义规则,一个使用StyleCop,另一个使用FxCop在我的代码上运行,但我没有找到如何在Sonarqube中导入自定义规则。我强调我使用Sonarqube5.4和C#插件5.1。在我的安装中,文件夹“规则”不存在。相反,我可以找到: 有人能帮我在SonarQube安装中导入我的自定义规则吗?

  • 我正在使用SonarQube 4.2和sonar-java-plugin-2.2.1。我试图基于BaseTreeVisitor(https://github.com/sonarsource/sonar-examples/blob/master/plugins/java-custom-rules/src/main/java/org/sonar/samples/java/examplecheck.ja

  • 我已经按照下面的示例实现了Sonar Java插件(Maven):https://github.com/SonarSource/sonar-examples/tree/master/plugins/java-custom-rules.复制了/extensions/plugins目录中生成的sonar插件。重新启动SonarQube服务器,并使用mvn sonar:sonar运行分析。 我可以在规则

  • 自定义中间有突起的UITabBar,demo中高仿了gogobot app底部不规则的TabBar。 [Code4App.com]

  • 授人以鱼,不如授人以渔。Dism++的能力是有限的,无法覆盖的所有用户的需求。因此给程序添加了自定义规则功能,方便高级用户打造自己的专属工具。 创建一个空白的自定义规则文件 我们只需要在Config目录新建一个 Custom*.xml 这样形式的xml文件即可(*表示任何字符串,比如Custom1.xml或者Custom我爱我的家.xml,另外文件以UTF8或者Unicode编码保存)。初始文件内