从Gradle运行PMD任务时获取NoClassDefFoundError

时间:2014-12-31 10:57:46

标签: java gradle pmd

我在通过Gradle运行PMD任务时获得NoClassDefFoundError

我在pmd-5.1.1.jar目录中拥有commons-io-1.4.jarjars以及所有其他WebContent/WEB-INF/lib。我的java文件位于src\com\company\project

目录中

Gradle构建文件

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

这是我第一次尝试Gradle。我能够构建和生成WAR但是PMD让我失望。有人可以告诉我,我做错了什么?在此先感谢:)

2 个答案:

答案 0 :(得分:1)

我知道你已经找到了答案,但是我正在为这个问题添加解决方案。

基本上你有非标准的项目结构。首先,网页内容应放在src/main/webapp下(src/main/java下的来源,依此类推)。其次,您不应该在WEB-INF/lib下放置诊断工具( pmd )。没有必要将此jar与整个应用程序一起部署到应用程序服务器。

也没有maven repo的声明,因此无法解析依赖关系( commons-io asm jaxen 等。)和 pmd 类路径( commons-io 等)下缺少依赖项 - 请注意依赖项<中 pmd 范围/ em>块。

Here您可以找到两个项目 - 标准和非标准项目布局。两者都配置正确。

答案 1 :(得分:0)

最后发现了这个问题。我需要从像Maven Central这样的远程仓库解决pmd及其所有传递依赖。

repositories {  
    mavenCentral()  
}

pmd {
toolVersion = "5.1.1"
ignoreFailures = true
}