2014-12-31 46 views
0

當通過Gradle運行PMD任務時,我得到NoClassDefFoundError從Gradle運行PMD任務時獲取NoClassDefFoundError

我有pmd-5.1.1.jar,commons-io-1.4.jar以及WebContent/WEB-INF/lib目錄中的所有其他jars。我的Java文件在目錄src\com\company\project

搖籃構建文件

apply plugin: 'java' 
apply plugin: 'war' 
apply plugin: 'pmd' 

sourceSets.main.java.srcDirs = ['src'] 
webAppDirName = 'WebContent' 

repositories { 
    flatDir { dirs "WebContent/WEB-INF/lib" } 
} 
dependencies { 
    providedCompile fileTree(dir: "WebContent/WEB-INF/lib", include: '*.jar') 
} 
war { 
    archiveName "ROOT.war" 
} 


錯誤日誌

C:\MyWorkspace\MyProject>gradle build 
:compileJava UP-TO-DATE 
:processResources UP-TO-DATE 
:classes UP-TO-DATE 
:war UP-TO-DATE 
:assemble UP-TO-DATE 
:pmdMain FAILED 

FAILURE: Build failed with an exception. 

* What went wrong: 
Execution failed for task ':pmdMain'. 
> java.lang.NoClassDefFoundError: org/apache/commons/io/IOUtils 

* Try: 
Run with --stacktrace option to get the stack trace. Run with --info or --debug 
option to get more log output. 

BUILD FAILED 

Total time: 5.275 secs 

這是第一次我想搖籃。我能夠構建以及生成WAR,但PMD讓我失望。有人可以告訴我我做錯了什麼嗎?在此先感謝:)

回答

0

最後發現問題。我需要從像Maven Central這樣的遠程倉庫解決pmd和所有它的傳遞依賴。

repositories { 
    mavenCentral() 
} 

pmd { 
toolVersion = "5.1.1" 
ignoreFailures = true 
} 
+1

是的,這是問題所在。您不應該在'WEB-INF/lib'下放置依賴關係。 – Opal

1

我知道您已經找到了答案,但僅供參考,我正在爲該問題添加解決方案。

基本上你有非標準的項目結構。首先,網頁內容應放置在src/main/webapp(來源src/main/java等等)下。其次,您不應將診斷工具(pmd)置於WEB-INF/lib之下。沒有必要將這些jar和整個應用程序一起部署到應用程序服務器上。

另外,也沒有行家回購的申報,這樣的依賴關係無法解析(的commons-io的ASMJaxen的等),並在PMD classpath中失蹤的依賴關係(commons-io等) - 注意pmd範圍依賴關係塊。

Here你可以找到兩個項目 - 標準和非標準的項目佈局。兩者都配置正確。

相關問題