在运行Gradle的PMD插件时在jar路径中包含jar

Dep*_*sio 4 pmd gradle

我正在尝试使用自定义规则集文件运行PMD,但该规则集包含一个自定义类的规则.这个类存在于一个jar中,它不是作为依赖项引入的,而是一个zip文件(它是一个依赖项)并被解压缩.想象一下PMD规则类就在build/extralib/blah.jar.

如何仅在运行PMD时将其包含在我的类路径中?我尝试了什么,但没有奏效:

pmd {
    ruleSetFiles = files("build/utils/pmd-rules.xml")
    pmdClasspath = files("build/extralib")
}
Run Code Online (Sandbox Code Playgroud)

要清楚,错误是:java.lang.ClassNotFoundException: com.package.for.pmd.CrazyRule.发生这种情况时运行pmdMain.

次要问题:PmdPmdExtension有什么区别?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新手,它有点令人困惑......

Pet*_*ser 5

在配置时pmd { ... },您正在配置扩展.有时您可能需要下拉到任务级别并进行配置tasks.pmd { ... }.(具有相同名称的扩展和任务是代码质量和IDE扩展/任务使用的常见模式.)向PMD类路径添加内容的最简单方法是:

dependencies {
    pmd ...
}
Run Code Online (Sandbox Code Playgroud)

我没有尝试,如果这适用于添加外部规则,但它可能.