我尝试使用自定义规则集文件运行 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 新手,这有点令人困惑......
pmd { ... }
时,您正在配置
扩展。有时您可能需要下拉到任务级别并配置
tasks.pmd { ... }
。 (具有相同名称的扩展和任务是代码质量和 IDE 扩展/任务使用的常见模式。)向 PMD 类路径添加内容的最简单方法是:dependencies {
pmd ...
}
我还没有尝试过这是否适用于添加外部规则,但可能会。
依赖项{
pmd 'com.pelatro.mviva:pmdcustomrules:develop' -> 示例
}
将 jar 解压到构建目录并将 xml 路径设置为ruleSetFiles 下午 {
ruleSetFiles = files("build/extractedFolder/pmd-rules.xml")
}