我在通过Gradle运行PMD任务时获得NoClassDefFoundError
。
我在pmd-5.1.1.jar
目录中拥有commons-io-1.4.jar
,jars
以及所有其他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让我失望。有人可以告诉我,我做错了什么?在此先感谢:)
答案 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
}