Groovy старая версия в войне Грааля - PullRequest
1 голос
/ 02 марта 2011

По какой-то причине '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 / заводной / контроль / 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 Ответ

9 голосов
/ 03 марта 2011

Похоже, у вас есть http-builder в вашем блоке зависимостей в BuildConfig.groovy.http-builder тянет к себе как к транзитивной зависимости.Вы должны исключить его, чтобы избежать конфликта с groovy-all, поставляемым с Grails.

compile("org.codehaus.groovy.modules.http-builder:http-builder:0.5.0") {
    excludes 'groovy', 'xml-apis'
}

(примечание: приведенный выше пример также исключает xml-apis, вы можете сделать это, если вы на Java)6, чтобы избежать дублирования классов)

Чтобы отслеживать подобные конфликты, вы можете использовать команду:

grails dependency-report

, которая генерирует отчет в target / dependency-report /

...