SonarQube上未显示自定义PMD Java规则冲突

SonarQube上未显示自定义PMD Java规则冲突,java,sonarqube,pmd,sonarqube5.1,Java,Sonarqube,Pmd,Sonarqube5.1,我试图在SonarQube上运行我的自定义PMD规则,但到目前为止,没有成功 我创建了一个从sonar pmd插件扩展而来的插件。在这个插件中,我有我的PMD规则集文件(custom_rules.xml)、Sonar规则文件(PMD extensions.xml)和自定义规则的Java类 SonarQube识别我的规则,我已在默认质量配置文件中启用它们。最后,当我在一个给定的项目上运行sonar分析时,我看到我的自定义规则被正确执行,并且它们在分析的项目中发现了违规行为 但是,这些违规行为从未显

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

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

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

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

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

自定义规则.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);
    }   
}
AssertViolation.java:

<?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);
    }   
}
针对包含类“AssertViolation.java”的项目运行时,控制台上的SonarQube分析输出:

从控制台消息“Found violation”中,我可以看到该规则已正确执行,但SonarQube仍指示0个问题

有什么想法吗?
谢谢

SonarQube没有显示违规的原因是sonar pmd插件中的违规记录器通过其键搜索规则

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

通过将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>

规则JavaAssert
避免在生产中使用断言
阻滞剂
生产代码不应使用assert命令
br/gov/tcu/rules/custom_rules.xml/RuleJavaAssert