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

5

我正在使用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"]
}

但是,我遇到了这个错误:

找不到规则‘java-errorprone’的资源‘null’。确保资源是有效的文件或URL,并在CLASSPATH上。当前的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不兼容?


我来晚了,但是"rulSets"中有一个错别字。也许这与这个问题有关。 - C-Otto
1个回答

6
在PMD 6.0.0中,旧的规则集已被弃用。规则被重新组织为类别,并且更加推动人们为其项目创建定制规则集。
也就是说,最佳实践是你应该编写自定义规则集文件,从Java规则目录中选择要包含哪些规则。
话虽如此,即使不建议,您仍然可以包含完整的类别。在Gradle下,可以通过以下方式实现:
pmdMain {
    rulSets = ["category/java/errorprone.xml"]
}

请注意,即使旧的规则集已被弃用,在 PMD 7.0.0 发布之前仍将继续使用。我们计划提供现有规则集文件的迁移工具以及更容易生成规则集的工具,以便于过渡。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接