Столкновения между двумя плагинами Grails

StackOverflow https://stackoverflow.com/questions/1609944

  •  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, и у меня это сработало.Однако ваша ситуация может быть немного сложнее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top