我正在尝试使用自定义规则集文件运行PMD,但该规则集包含一个自定义类的规则。这个类存在于一个jar中,它作为依赖项被而不是引入,而是以一个zip文件(这是一个依赖项)并被解压缩。想象一下,PMD规则类就在build/extralib/blah.jar
。
如何仅在运行PMD时将其包含在我的类路径中?我尝试了什么,但没有奏效:
pmd {
ruleSetFiles = files("build/utils/pmd-rules.xml")
pmdClasspath = files("build/extralib")
}
要清楚,错误是:java.lang.ClassNotFoundException: com.package.for.pmd.CrazyRule
。运行pmdMain
时会发生这种情况。
次要问题:Pmd和PmdExtension之间有什么区别? Pmd有pmdClasspath
,但PmdExtension没有。当我添加pmdClasspath
时,我得到了:
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties.
Deprecated dynamic property: "pmdClasspath" on "org.gradle.api.plugins.quality.PmdExtension_Decorated@70221fc5", value: "file collection".
所以我猜它只坚持PmdExtension?作为Gradle新手,它有点令人困惑......
答案 0 :(得分:5)
配置pmd { ... }
时,您正在配置扩展名。有时您可能需要下拉到任务级别并改为配置tasks.pmd { ... }
。 (具有相同名称的扩展和任务是代码质量和IDE扩展/任务使用的常见模式。)将内容添加到PMD类路径的最简单方法是:
dependencies {
pmd ...
}
如果这可以用于添加外部规则,我还没试过,但它可能会。