Находится ли JPA persistence.xml classpath? - PullRequest
8 голосов
/ 14 апреля 2010

Вот что я пытаюсь сделать. Я использую постоянство JPA в веб-приложении, но у меня есть набор модульных тестов, которые я хочу запустить вне контейнера.

У меня есть основной persistence.xml в папке META_INF моего основного приложения, и он отлично работает в контейнере (Glassfish).

Я поместил второй persistence.xml в папку META-INF моего каталога test-classes. Это содержит отдельный блок персистентности, который я хочу использовать только для тестирования. В Eclipse я поместил эту папку выше в classpath, чем папка по умолчанию, и она, кажется, работает.

Теперь, когда я запускаю сборку maven непосредственно из командной строки и он пытается запустить модульные тесты, переопределение persistence.xml игнорируется. Я вижу переопределение в папке META-INF каталога, сгенерированного maven test-classes, и ожидал, что тесты maven будут использовать этот файл, но это не так. Мои весенние тестовые изменения конфигурации, достигнутые подобным образом, работают.

Я не совсем понимаю, находится ли persistence.xml через путь к классам. Если это так, то мое переопределение должно работать так же, как переопределение пружины, поскольку плагин maven surefire объясняет"[Каталог класса тестирования] будет включен в начале пути к классу теста".

Неправильно ли я предвидел, как расположен файл persistence.xml?

Я мог бы (и должен был) создать второй модуль персистентности в рабочем файле persistence.xml, но кажется неудобным помещать тестовую конфигурацию в этот рабочий файл. Любые другие идеи о том, как достичь моей цели, приветствуются.

Ответы [ 2 ]

4 голосов
/ 14 апреля 2010

Неясно, куда вы поместили «второе» persistence.xml (тестовая версия), но вы должны поместить его в src/test/resources/META-INF. Тестовые ресурсы автоматически добавляются в путь к классам, установленный Maven для ваших модульных тестов, и имеют приоритет над ресурсами, размещенными в src/main/resources

3 голосов
/ 14 апреля 2010

persistence.xml загружается из пути к классам; в прошлом я делал именно то, что вы описали.

Скорее всего, это проблема с Maven. Вы можете отладить путь к классам maven, запустив его с параметром -X.

...