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

时间:2018-02-27 19:26:32

标签: gradle pmd

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

apply plugin: "pmd"

pmd {
    toolVersion = "6.1.0"
}

pmdMain {
    rulSets = ["java-basic"]
}

一切都过去了,但我在控制台中得到了一些弃用警告:

  

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

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

pmdMain {
    rulSets = ["java-errorprone"]
}

然而,我收到此错误:

  

无法找到资源' null'对于规则' java-errorprone'。确保资源是有效的文件或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不兼容?

1 个答案:

答案 0 :(得分:5)

在PMD 6.0.0中,旧的规则集已弃用。这些规则被重新组织成类别,并且人们更加努力为他们的项目创建量身定制的规则集。

也就是说,最佳做法是让write a custom ruleset文件从Java Rule Catalog

中选择要包含哪些规则

话虽如此,即使不可取,您仍然可以包含完整的类别。在Gradle下,可以通过以下方式完成:

pmdMain {
    rulSets = ["category/java/errorprone.xml"]
}

请注意,即使已弃用,旧规则集也将继续有效,直到PMD 7.0.0发布。我们计划提供migration tools for existing ruleset files以及更简单的规则集生成器,以简化过渡。