Как Grails обрабатывает зависимости плагинов - PullRequest
4 голосов
/ 12 января 2012

Я создаю плагин Grails в качестве оболочки для сложного продукта. Этот продукт имеет много зависимостей от других продуктов, таких как спящий режим. Проблема в том, что у grails есть одни и те же зависимости, но с разными версиями. Например. Граальс -> Спящий 3.6.7 другой продукт -> hibernate 3.5.6

Как Grails обрабатывает зависимости плагина? Grails создает отдельный ClassLoader для каждого плагина? Это настраивается?

Заранее спасибо!

1 Ответ

6 голосов
/ 12 января 2012

Grails имеет механизм разрешения зависимостей, который разрешает конфликты между зависимостями:

  • Сам Грааль
  • Приложение Grails
  • Плагины приложения
  • Зависимости плагинов

Просто убедитесь, что вы указали, от чего зависит ваш плагин, и пусть разрешение зависимостей Grails позаботится обо всем остальном. Исторически Grails использовал Ivy для разрешения зависимостей, но начиная с Grails 2.3.0 по умолчанию используется Maven / Aether с возможностью использовать Ivy.

Иногда в приложении вам может потребоваться переопределить выбор, сделанный разрешением зависимости, например, исключить транзитивную зависимость или принудительно использовать конкретную версию библиотеки, вы можете сделать все это в BuildConfig.groovy

Как обычно, справочный документ Grails обеспечивает очень полный охват этой темы .

Обновление

В дополнение к вашему комментарию ниже, если вы поместите JAR в каталог lib вашего приложения, он будет проигнорирован разрешением зависимостей и размещен непосредственно в вашем classpath. Так что обычно вы не должны этого делать. Вместо этого укажите JAR и его версию в dependencies разделе BuildConfig.groovy.

Обновление 2

Синтаксис для указания JAR:

<scope> <group>:<artifact>:<version>

group, artifact и version совместно определяют что (JAR) вы хотите загрузить, тогда как область действия определяет, как вы хотите использовать JAR. Самый простой способ найти группу, артефакт и версию конкретного JAR-файла - это поиск в репозитории Maven .

Прочтите это , чтобы узнать о различных областях, которые вы можете использовать.

...