Столкновения между двумя плагинами Grails - PullRequest
1 голос
/ 23 октября 2009

У меня возникла проблема между двумя разными плагинами Grails (Drools 0.3 и WebTest), где они оба, кажется, содержат некоторую версию xml-api- *, и они, похоже, не могут сосуществовать.

Как лучше всего решать такие проблемы?

Ответы [ 3 ]

2 голосов
/ 23 октября 2009

Удаление одной из нарушающих библиотек является одним из способов, но каждый раз, когда вы извлекаете исходный код, вам будет больно. К сожалению, я не могу придумать другого пути из-за того, что xml-apis находится не в каталоге lib плагина WebTest, а как часть загруженной установки WebTest.

Обычно плагин lib jar не добавляется в classpath, если он уже существует в директории lib приложения, поэтому вы можете создать фиктивный jar с тем же именем, чтобы остановить добавление одной из библиотек.

При просмотре источника плагина WebTest все равно следует исключить xml-apis из пути к классам (_Events.groovy строка 100) - используете ли вы последнюю версию? Вы уверены, что плагин Drools не конфликтует с xml-apis от Grails?

В версии 1.2 улучшено разрешение зависимостей, которые могут использовать плагины, чтобы избежать подобных проблем в будущем.

2 голосов
/ 27 октября 2009

Лучший способ сделать это - использовать разрешение Grails DSL. . Вы можете исключить оскорбительные зависимости, подобные этой:

plugin("hibernate") {
compile( 'org.hibernate:hibernate-core:3.3.1.GA') {
    excludes 'ehcache', 'xml-apis', 'commons-logging'
}
compile 'org.hibernate:hibernate-annotations:3.4.0.GA',
        'org.hibernate:hibernate-commons-annotations:3.3.0.ga'
runtime 'javassist:javassist:3.4.GA'    
}

Это работает с Grails 1.2. Вполне вероятно, что ваши плагины - pre-Grails-1.2, иначе механизм разрешения внутренних зависимостей, основанный на Ivy , должен позаботиться о столкновениях для вас. Разрешение зависимостей DSL - не более чем отличный способ написания Ivy xml.

1 голос
/ 23 октября 2009

Я не уверен, но что-то, что можно попробовать, это перейти в каталог для каждого из плагинов:

~ / .grails / $ {GRAILS_VERSION} / плагины / $ {THE_PLUGIN} / Lib

и удалите самую низкую версию xml-api - *.

Если вам повезет, в более новой версии библиотек не было никаких изменений.

Кажется, что библиотеки для плагинов доступны всему приложению Grails (иначе вы не получите конфликта).

Я сделал что-то похожее на обновление до более новой версии библиотек отчетов jasper в плагине jasper, и это сработало для меня. Ваша ситуация может быть немного более сложной, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...