Как использовать Hibernate в зависимости от проекта Grails (зависимость от IntelliJ Module)? - PullRequest
0 голосов
/ 20 марта 2012

У меня есть приложение Grail, которое ссылается на библиотеку Java (как зависимость модуля IntelliJ). Это работает, но как только я добавлю hibernate в качестве зависимости от библиотеки Java, Grails больше не будет работать.

Loading Grails 2.0.1
Error Error executing script RunApp: Provider for javax.xml.parsers.SAXParserFactory cannot be found (Use --stacktrace to see the full trace)

В моем модуле Java я добавляю hibernate со следующим:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-entitymanager</artifactId>
  <version>4.0.0.Final</version>
</dependency>

Я не вижу хорошего способа обойти это. Отчет о зависимостях Grails не показывает конфликтующие библиотеки. Ошибка возникает, если плагин hibernate установлен в приложении Grails или нет.

Имейте в виду, что (в данном случае) библиотека Java не , включаемая через BuildConfig.groovy. Он включается как зависимость модуля IntelliJ. Если я включаю модуль в качестве jar через BuildConfig.groovy, все работает, но я теряю способность входить в код Java.

Разъяснение:

По словам пользователей JetBrains, библиотека Java включена как в модуль IntelliJ Module, так и в BuildConfig.groovy. При выполнении из командной строки проект работает, это проблема только при запуске из IDE.

Предложения

Ответы [ 2 ]

2 голосов
/ 20 марта 2012

Вернуть зависимость для библиотеки java в BuildConfig.groovy и использовать последнюю версию IDEA: http://confluence.jetbrains.net/display/IDEADEV/IDEA+11.1+EAP. Навигация должна работать нормально.

0 голосов
/ 04 апреля 2012

После экспериментов я наткнулся на следующее, которое, кажется, работает очень хорошо (по крайней мере, в IDEA 11.1):

  • На ваш JAR-библиотеку Java следует ссылаться из BuildConfig.groovy (мы используем Maven, поэтому нам пришлось добавить локальный Maven репо тоже)
  • Также указывайте ваши модули как зависимости модуля модуля Grails
  • (это очень важно) в конфигурации запуска для вашего проекта grails, снимите отметку с опции "add --classpath ..."

Зависимость модуля дает вам:

  • Немедленная осведомленность о классах Java и их методах из проекта Grails
  • Поддержка входа в код Java из вашего проекта Grails.

Ссылка BuildConfig дает вам:

  • поддержка команд grails, включая run-app (именно так IntelliJ начинает работу при запуске / отладке проекта)

Если вы оставите опцию --classpath включенной, то вы запутаете способ, которым grails разрешает свои зависимости. Возможно, есть лучший способ сделать это, но я не нашел его.

Дополнительное примечание

Существует ошибка во взаимодействии grails и maven, из-за которой grails не извлекают зависимости из локальных репозиториев Maven 3, если pom.xml не был изменен.

Следовательно, наш полный цикл обновления зависимостей выглядит следующим образом:

  • наверх
  • mvn clean install
  • найдите соответствующие файлы POM в репозитории и коснитесь их
  • обратно в каталог приложения grails и зависимости обновления grails
  • запустить приложение

Это необходимо делать только при наличии обновлений вышестоящих библиотек Java.

Шляпный совет Сергею из Jet Brains для отслеживания этого.

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