2013-06-18 68 views
4

我试图用自定义规则集文件运行PMD,但该规则集包含一个自定义类的规则。这个类存在于一个不是而是作为依赖关系拉入的jar中,而是在一个zip文件(这是一个依赖项)中被解压缩。想象一下PMD规则类只是在build/extralib/blah.jar在运行Gradle的PMD插件时在类路径中包含jar

如何在运行PMD时将其包含在我的类路径中?我已经试过,但没有奏效:

pmd { 
    ruleSetFiles = files("build/utils/pmd-rules.xml") 
    pmdClasspath = files("build/extralib") 
} 

需要明确的是,该错误是: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 "[email protected]", value: "file collection".

所以我想,只有坚持PmdExtension?作为一个Gradle新手,这有点令人困惑...

回答

5

当您配置pmd { ... },您正在配置扩展。有时您可能需要下降到任务级别,并配置tasks.pmd { ... }。 (具有延伸和同名的任务是由代码质量和IDE扩展/任务中使用的通用模式)来添加的东西到PMD类路径的最简单的方法是:

dependencies { 
    pmd ... 
} 

我的天堂”如果这适用于添加外部规则,则尝试尝试,但可能。

+1

它似乎工作。我也必须手动添加PMD依赖项,但没关系。因此,我有一个依赖:'pmd fileTree(dir:'build/extralib',包含:['* .jar'])'和'pmd'pmd:pmd:4.3''。我也摆脱了'pmdClasspath'。似乎工作。谢谢! – Depressio

相关问题