在运行Gradle'时,在类路径中包含jar;PMD插件

在运行Gradle'时,在类路径中包含jar;PMD插件,gradle,pmd,Gradle,Pmd,我试图使用自定义规则集文件运行PMD,但该规则集包含一个自定义类的规则。这个类存在于一个jar中,它不是作为依赖项拉入的,而是以一个zip文件(这是一个依赖项)的形式出现并被解包。假设PMD规则类就在build/extralib/blah.jar中 仅运行PMD时,如何将其包含在类路径中?我尝试过但不起作用的: pmd { ruleSetFiles = files("build/utils/pmd-rules.xml") pmdClasspath = files("build/e

我试图使用自定义规则集文件运行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具有
pmdClasspath
,但PmdExtension没有。当我添加
pmdClasspath
时,我得到:

按需创建属性(又称动态属性)已被弃用,并计划在Gradle 2.0中删除。请阅读http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html 有关替换动态特性的信息,请参见。
不推荐使用的动态属性:“org.gradle.api.plugins.quality.PmdExtension”上的“pmdClasspath”_Decorated@70221fc5,值:“文件集合”。


所以我猜它只会依附于PMD扩展?作为一个新手,这有点让人困惑…

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

dependencies {
    pmd ...
}

我还没有尝试过这是否适用于添加外部规则,但它可能会起作用。

似乎有效。我也必须手动添加PMD依赖项,但没关系。因此,我有一个类似于:
pmd文件树(dir:'build/extralib',包括:['*.jar'])
pmd'pmd:pmd:4.3'
。我也去掉了
pmdClasspath
。似乎有效。谢谢嗨,你能扩大你的答案吗?我突然想到了同样的问题。你能详细地补充一下你的答案吗。