Столкновения между двумя плагинами Grails
-
05-07-2019 - |
Вопрос
У меня возникла проблема между двумя разными плагинами Grails (Drools 0.3 и WebTest), где они оба, похоже, включают некоторую версию xml-api-*, и они, похоже, не могут сосуществовать.
Каков наилучший способ решения подобных проблем?
Решение
Удалить одну из нарушающих библиотек можно только одним способом, но каждый раз, когда вы извлекаете исходный код, вам будет больно. К сожалению, я не могу придумать другого пути из-за того, что xml-apis находится не в каталоге lib плагина WebTest, а как часть загруженной установки WebTest. Р>
Обычно библиотека lib jar плагина не добавляется в путь к классам, если она уже существует в каталоге lib приложения, поэтому вы можете создать фиктивный jar с тем же именем, чтобы остановить добавление одной из библиотек.
При просмотре источника плагина WebTest все равно следует исключить xml-apis из пути к классам (_Events.groovy, строка 100) - используете ли вы последнюю версию? Вы уверены, что плагин Drools не конфликтует с xml-apis от Grails?
В версии 1.2 улучшено разрешение зависимостей, которые могут использовать плагины, чтобы избежать подобных проблем в будущем.
Другие советы
Лучший способ сделать это - использовать 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.
Я не уверен, но что-то, что можно попробовать, это зайти в каталог для каждого из плагинов:
~/.grails/${GRAILS_VERSION}/плагины/${THE_PLUGIN}/библиотека
и удалите самую низкую версию xml-api-*.
Если вам повезет, в более новой версии библиотек не было критических изменений.
Похоже, что библиотеки для плагинов доступны для всего приложения grails (в противном случае вы бы не получили конфликт).
Я сделал нечто подобное для обновления до более новой версии библиотек отчетов jasper в плагине jasper, и у меня это сработало.Однако ваша ситуация может быть немного сложнее.