2012-06-03 3 views
34

На работе у нас есть библиотека сущностей, которая используется несколькими клиентами для библиотеки (несколько сервлетов, настольное приложение и т. Д.). Библиотека сущностей состоит из классов JPA-Annotated и, наиболее значимо, persistence.xml.Где разместить persistence.xml в библиотеке jar с помощью maven?

Все проекты сконфигурированы с использованием maven.

Где должен быть помещен файл persistence.xml? Он должен быть расположен внутри файла jar этой библиотеки сущностей, и я не уверен, как настроить это с помощью maven.

(Мы просто раскалывается проект на несколько более мелких проектов)

«» «UPDATE» «» Чтобы быть ясно, об этом, есть один Maven-Проект A, содержащий persistence.xml и еще один (B), который зависит от этого Проекта. У меня есть persistence.xml в src/main/resources/META-INF/persistence.xml в A при попытке использовать EntityManager внутри A, без проблем, insidie ​​B: ничего не работает.

EclipseLink дает следующее предупреждение:

[EL Warning]: The collection of metamodel types is empty. Model classes may not have been found during entity search for Java SE and some Java EE container managed persistence units. Please verify that your entity classes are referenced in persistence.xml using either <class> elements or a global <exclude-unlisted-classes>false</exclude-unlisted-classes> element 

Я подозреваю, persistence.xml не найден, но он присутствует в целевом банке.

ответ

69

As @Dave упоминает выше src/main/resources - это место. Когда дело доходит до persistence.xml, его следует поместить в папку META-INF. Итак, заключить: src/main/resources/META-INF/persistence.xml.

+3

работал отлично для меня. Придется создать папку META-INF и поместить в нее файл persistence.xml. – Sorter

6

Файлы конфигурации XML почти всегда принадлежат src/main/resources, в иерархии пакетов (как и исходные файлы Java). Эти файлы будут скопированы в артефакт в той же иерархии.

10

Я только получил persistence.xml работать в моей WAR при размещении в WEB-INF/классы/META-INF, так же, как документация советует:

http://docs.oracle.com/cd/E19159-01/819-3669/bnbrj/index.html заявляет следующее:

Если вы упаковываете блок персистентности как набор классов в файл WAR, persistence.xml должен быть расположен в каталоге WEB-INF/classes/META-INF.

В моем реквизите проекта Затмения, я добавил это путь сборки:

src\main\resources

проект Моей Maven имеет persistence.xml по следующему адресу:

src\main\resources\META-INF\persistence.xml

После запуска Maven clean install ВОЙНА построена с:

WEB-INF\classes\META-INF\persistence.xml

Когда я бросаю эту WAR в папку webapps Tomcat 7, она развернута правильно, и JPA работает.

+1

Это было полезно для моего варианта использования, но не для заданного вопроса, который находится вокруг файлов 'persistence.xml' в составных JAR (возможно, WAR), а не непосредственно в WAR. Тем не менее, подсказка 'WEB-INF/classes/META-INF' довольно полезна! –

2

В файле maven pom.xml вам необходимо добавить каталог ресурсов, поэтому вам не нужно добавлять его в путь сборки в eclipse вручную.

<project> 
    ... 
    <build> 
    ... 
    <resources> 
     <resource> 
     <directory>src/resources</directory> 
     </resource> 
    </resources> 
    ... 
    </build> 
    ... 
</project> 

см: http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html

+4

, вы должны поместить его в 'src/main/resources' вместо этого, который является maven по умолчанию и автоматически добавляется –

+0

thats true, спасибо, что указали это – eeezyy