2013-06-18 67 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

相關問題