Отличная старая версия в Grails War
По какой-то причине 'grails war' включает в "WEB-INF/lib" файлы "groovy-1.6.9.jar" и "groovy-all-1.7.8.jar". Я работаю с Grails 1.3.7 и при развертывании этой войны в Tomcat я получаю следующую ошибку:
org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем "pluginManager", определенным в ресурсе ServletContext [/WEB-INF/applicationContext.xml]: сбой вызова метода init; вложенным исключением является java.lang.NoSuchMethodError: org.codehaus.groovy.control.SourceUnit.getSource()Lorg/codehaus/groovy/control/io/ReaderSource;
Единственный способ, которым я могу развернуть войну, - удалить старый файл Groovy, и приложение работает нормально.
Я отладил процесс зависимости, и все, что я мог найти, было этим:
[NOT REQUIRED] org.codehaus.groovy#groovy;1.6.9!groovy.jar
...
:: evicted modules:
junit#junit;3.8.2 by [junit#junit;4.8.1] in [test]
in org.codehaus.groovy#groovy;1.6.9 with latest-revision
Итак, я продолжил и попал в файл 'org.codehaus.groovy.modules.http-builder/http-builder/ivy-0.5.0-RC2.xml', который содержит следующее:
<dependency org="org.codehaus.groovy" name="groovy" rev="[1.5,1.6.99)"
Я изменил эту строку на "[1.7,1.7.8)", и процесс зависимости работает нормально, и теперь война разворачивается без каких-либо проблем, но я никогда раньше не касался этого, и я волнуюсь. Это правильный путь для работы с зависимостями Grails?
Все это начало происходить после установки плагина JQuery UI и даже после его удаления проблема продолжалась.
Спасибо
1 ответ
Похоже, у вас есть http-builder в вашем блоке зависимостей в BuildConfig.groovy. http-builder тянет к себе как к транзитивной зависимости. Вы должны исключить это, чтобы избежать конфликта с Groovy - все поставляется с Grails.
compile("org.codehaus.groovy.modules.http-builder:http-builder:0.5.0") {
excludes 'groovy', 'xml-apis'
}
(примечание: приведенный выше пример исключает также xml-apis, вы можете сделать это, если вы используете Java 6, чтобы избежать дублирования классов)
Чтобы отследить конфликты, подобные этой, вы можете использовать команду:
grails dependency-report
который генерирует отчет в целевой / зависимый отчет /