2014-12-31 4 views
0

Я получаю NoClassDefFoundError во время выполнения задания PMD через Gradle.Получение NoClassDefFoundError во время работы задачи PMD из Gradle

У меня есть pmd-5.1.1.jar, commons-io-1.4.jar, а также все остальные jars в каталоге WebContent/WEB-INF/lib. Мои ява файлы находятся в каталоге 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

Наконец-то нашел проблему. Мне нужно было разрешить pmd и все его транзитивные зависимости от удаленного репо, как Maven Central.

repositories { 
    mavenCentral() 
} 

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

Да, в этом была проблема. Вы не должны устанавливать зависимости в 'WEB-INF/lib'. – Opal

1

Я знаю, что вы уже нашли ответ, но FYI Я добавляю решение проблемы.

В принципе у вас есть стандартная структура проекта. Прежде всего, веб-контент должен быть помещен под src/main/webapp (источники под src/main/java и т. Д.). Во-вторых, вы не должны ставить инструменты диагностики (pmd) под WEB-INF/lib. Нет необходимости включать эти баннеры вместе со всем приложением на сервер приложений.

Там также не было декларирование Maven репо, так что зависимости не могут быть решены (Обще-IO, ASM, jaxen и т.д.), так и отсутствовавшие зависимости под PMD классам (commons-io и т. д.) - обратите внимание на pmd область действия в зависимостей блок.

Here вы можете найти два проекта - со стандартной и нестандартной планировкой проекта. Оба настроены правильно.