java maven jpa jar persistence.xml

java - ¿Dónde poner persistence.xml en el contenedor de la biblioteca utilizando maven?



jpa jar (4)

En el trabajo, tenemos una biblioteca de entidades que es utilizada por varios clientes para la biblioteca (varios servlets, una aplicación de escritorio, etc.). La biblioteca de la entidad consta de clases anotadas por JPA y, más prominentemente, persistence.xml.

Todos los proyectos se configuran usando maven.

¿Dónde debe colocarse un archivo persistence.xml? Necesita estar ubicado dentro del archivo jar de esa biblioteca de entidades y no estoy seguro de cómo configurar esto usando maven.

(Estamos dividiendo un proyecto en varios proyectos más pequeños)

'''' ''ACTUALIZACIÓN'' '''' Para que quede claro al respecto, hay un Proyecto A de Maven que contiene persistence.xml y otro (B) que depende de ese Proyecto. He colocado persistence.xml en src / main / resources / META-INF / persistence.xml en A, cuando trato de usar un EntityManager dentro de A, no hay problema, insidie ​​B: nada funciona.

EclipseLink da la siguiente Advertencia:

[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

Sospecho que persistence.xml no se encuentra, pero está presente en el contenedor de destino.


Como @Dave menciona arriba, src/main/resources es el lugar. Cuando se trata de persistence.xml , debe colocarse en la carpeta META-INF . Entonces para concluir: src/main/resources/META-INF/persistence.xml .



Los archivos de configuración XML casi siempre pertenecen a src/main/resources , en una jerarquía de paquetes (al igual que los archivos fuente de Java). Esos archivos se copiarán en el artefacto en la misma jerarquía.


Solo he obtenido persistence.xml para que funcione en mi WAR cuando se coloca en WEB-INF / classes / META-INF, del mismo modo que la documentación aconseja:

http://docs.oracle.com/cd/E19159-01/819-3669/bnbrj/index.html declara lo siguiente:

Si empaqueta la unidad de persistencia como un conjunto de clases en un archivo WAR , persistence.xml debe ubicarse en el directorio WEB-INF / classes / META-INF del archivo WAR.

En mis accesorios para proyectos de Eclipse, agregué esto a la ruta de compilación:

src/main/resources

Mi proyecto Maven tiene persistence.xml en la siguiente ubicación:

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

Después de ejecutar Maven clean install , un WAR está construido con:

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

Cuando publico este WAR en la carpeta de aplicaciones web de Tomcat 7, se despliega correctamente y funciona el JPA.