java - PMD 自定义规则集 - 也许您拼错了规则名称?

标签 java maven-plugin pmd

我正在尝试将 pmd 集成到我的项目中。但我收到以下错误

java.lang.IllegalArgumentException: No rules found. Maybe you mispelled a rule name?

pom.xml条目如下 -

<reporting>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>3.7</version>
            <configuration>
                <linkXRef>false</linkXRef>
                <rulesets>             
                    <ruleset>
                        pmdruleset.xml
                    </ruleset>
                </rulesets>
            </configuration>
        </plugin>
    </plugins>
</reporting>

自定义规则集文件包含以下内容 -

<?xml version="1.0"?>
<ruleset name="Controversial"
         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">

    <description>
        <rule ref="rulesets/java/errorprone.xml/NullAssignment"/>
    </description>
</ruleset>

我无法理解出了什么问题。有人可以帮忙吗!

最佳答案

@eclipse-pmd 是对的,规则标记需要是规则集标记的子级。

此外,您尝试使用的规则(NullAssignment)不在规则集中容易出错,但存在争议。在 PMD 6 中,规则还被组织成类别,现在位于“容易出错”类别中。更多相关内容将随后发布。

ma​​ven-pmd-plugin 3.7/PMD 5.5.1

您正在使用 maven-pmd-plugin 版本 3.7 -> 这意味着,您会自动使用旧的 PMD 版本(准确地说是版本 5.5.1)。对于此版本,您的规则集应如下所示:

<?xml version="1.0"?>
<ruleset name="Custom Ruleset"
     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">

    <description>
        Custom Ruleset
    </description>

    <rule ref="rulesets/java/controversial.xml/NullAssignment"/>
</ruleset>

PMD 5.5.1 的文档位于:https://pmd.github.io/pmd-5.5.1/pmd-java/rules/java/controversial.html#NullAssignment

ma​​ven-pmd-plugin 3.9.0/PMD 6.0.1

如果您切换到最新的 maven-pmd-plugin 版本 3.9.0,您将自动使用 PMD 6.0.1 并受益于最新的错误修复。您可以继续使用上面的规则集,但是您会看到弃用通知,因为我们移动了规则。要消除此警告,请使用以下规则引用:

<rule ref="category/java/errorprone.xml/NullAssignment" />

PMD 6.0.1 的文档位于:https://pmd.github.io/pmd-6.0.1/pmd_rules_java_errorprone.html#nullassignment

有关规则集的文档位于:https://pmd.github.io/pmd-6.0.1/pmd_userdocs_understanding_rulesets.html

关于java - PMD 自定义规则集 - 也许您拼错了规则名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48954409/

相关文章:

java - 如何从 Servlet 的 doGet 在 Spark 集群上运行 Spark 应用程序?

java - 多个IF else条件和逻辑OR运算的区别

maven - 无法在 maven-pmd-plugin 5.0.2 中使用自定义规则集

java - 使用 Checkstyle 验证域对象获取/设置

java - 帮助安装 PMD Eclipse 插件

java - JAXP 和 JAXB 有什么区别?

java - 从文本文件中删除多余的空格

java - cxf-xjc-plugin :3. 3.0 中的 Maven MojoExecutionException

java - 安装后复制可运行的jar

java - Gradle 的 PMD 插件 : what are acceptable arguments?