如何获得Gradle使用PMD 6.x类别?

Thu*_*rge 5 pmd gradle

我正在使用Gradle 4.5.1和标准的Gradle插件。我特别要求我的构建使用PMD 6.1.0,如下所示:

apply plugin: "pmd"

pmd {
    toolVersion = "6.1.0"
}

pmdMain {
    rulSets = ["java-basic"]
}
Run Code Online (Sandbox Code Playgroud)

一切都通过了,但是在控制台中,我收到了许多弃用警告,其内容如下:

使用“规则名称” category/java/errorprone.xml/AvoidBranchingStatementAsLastInLoop代替不推荐使用的“规则名称” rulesets/java/basic.xml/AvoidBranchingStatementAsLastInLoop。PMD 7.0.0将删除对此不建议使用的规则名称的支持。

我最初的想法是pmdMain像这样更改块:

pmdMain {
    rulSets = ["java-errorprone"]
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到此错误:

找不到规则“ java-errorprone”的资源“ null”。确保资源是有效文件或URL,并且在CLASSPATH上。这是当前的类路径:~\.gradle\wrapper\dists\gradle-4.5.1-bin\a5vbgfvpwtoqz8v2cdivxz28k\gradle-4.5.1\lib\gradle-launcher-4.5.1.jar

我做错了什么吗?Gradle的PMD插件与PMD 6.x不兼容吗?

Joh*_*nco 6

在PMD 6.0.0中,旧的规则集已弃用。规则被重新组织成几类,并且更大的推动力是人们为他们的项目创建量身定制的规则集。

也就是说,最佳实践是您编写一个自定义规则集文件,从Java规则目录中选择要包含的规则

话虽如此,您仍然可以包括完整的类别,即使不建议这样做。在Gradle下,可以通过以下方式完成:

pmdMain {
    rulSets = ["category/java/errorprone.xml"]
}
Run Code Online (Sandbox Code Playgroud)

请注意,即使过时了,旧规则集也将继续起作用,直到发布PMD 7.0.0。我们计划为现有规则集文件提供迁移工具,并提供更简单的规则集生成器以简化过渡。