Указание «предоставленных» зависимостей с помощью grails в maven

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

Вопрос

У меня есть приложение Grails 1.3.7. Я использую классы Spring JMS, чтобы настроить одну из моих служб grails в качестве слушателя сообщений, настраивая эти классы в grails-app / conf / resources.groovy. Я использую maven 2.0.9 для сборок, используя grails-maven-plugin 1.3.7 и цель «maven-war» для создания файла war.

У меня есть два сценария:

  1. Я хочу иметь возможность запускать мое приложение grails локально из командной строки, используя «mvn grails: run-app». Я использую это во время разработки.
  2. Я хочу иметь возможность запускать приложение в JBoss 5.1.0 GA, развернув военный файл, созданный maven. Это то, что мы делаем в нашей среде интеграции, тестирования и производства.

При работе внутри JBoss все зависимости, связанные с JMS-провайдером, доступны и предоставляются сервером приложений. Обычный способ справиться с этим с помощью maven - объявить эти зависимости в файле pom с областью действия "provided". Это сделает эти зависимости доступными для компиляции и модульных тестов, но исключит их из файла war.

Однако, когда я запускаю локально из командной строки с помощью «mvn grails: run-app», оказывается, что эти зависимости недоступны для grails во время выполнения, о чем свидетельствуют многие исключения ClassNotFound и т. д. Изменение области видимости на "компилировать" позволяет мне работать локально. Однако теперь эти зависимости упаковываются в мой военный файл, который мне не нужен и который имеет тенденцию ломать работу при запуске внутри JBoss.

Решение (или обходной путь), который я нашел на данный момент, состоит в том, чтобы включить эти зависимости JMS в область действия по умолчанию (компиляцию) в мой pom и удалить эти банки (и все их транзитивные зависимости) из файла войны с помощью некоторого кода в BuildConfig .groovy (см. ниже). Это работает, но это беспорядочно и подвержено ошибкам, потому что мне нужно перечислить каждую транзитивную зависимость (а их много!).

Еще кое-что, что я пробовал:

Сначала я подумал, что, возможно, смогу добавить необходимые зависимости JMS в BuildConfig.groovy в разделе «grails.project.dependency.resolution / dependencies» и полностью исключить их из pom. Однако это не сработало, потому что, согласно эта ссылка , раздел зависимостей BuildConfig игнорируется при запуске grails под maven.

Я также заметил параметр "pom true" (упомянутый в приведенной выше ссылке) и попытался использовать его. Однако при попытке запустить grails: run-app grails выдает предупреждения о неразрешенных зависимостях и выдает ошибку tomcat:

родовое слово

Мой вопрос: Есть ли лучший способ - с помощью параметров конфигурации grails и / или maven - выполнить то, что я хочу, то есть иметь возможность успешно запускать grails локально и в JBoss, без необходимости вручную исключать все транзитивные зависимости из файла war?

Примечание. Я не могу изменить используемую мной версию grails, JBoss или maven.

Некоторые выдержки из соответствующих файлов:

BuildConfig.groovy:

родовое слово

pom.xml:

родовое слово

resources.groovy:

родовое слово
Это было полезно?

Решение

Решением для этого является создание динамической области для вашей зависимости через профиль.

Пример:

родовое слово

Затем, когда в вашей командной строке будет указан профиль:

родовое слово

Надеюсь, это поможет.

Другие советы

Это было «исправлено» в Grails 2.0.Плагин maven для grails был обновлен, так что «предоставленная» область видимости означает, что зависимость доступна при локальном запуске, но не включена в файл war package.

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