2012-06-03 56 views
34

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.¿Dónde poner persistence.xml en el contenedor de la biblioteca utilizando maven?

Todos los proyectos se configuran usando maven.

¿Dónde debería 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.

(que son simplemente dividir un proyecto en varios proyectos más pequeños)

'' 'update' '' Para ser claros acerca de esto, hay una Maven-Proyecto A que contiene el 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 la persistence.xml no se encuentra, pero está presente en el jar de destino.

Respuesta

69

Como @Dave menciona más 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.

+3

funcionado perfectamente para mí. Tuve que crear una carpeta META-INF y poner persistence.xml en ella. – Sorter

6

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

10

Sólo he conseguido persistence.xml para trabajar en mi guerra cuando se coloca en WEB-INF/classes/META-INF, al igual que la documentación aconseja:

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

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

En mis puntales del proyecto Eclipse, que añade esto a la trayectoria de la estructura:

src\main\resources

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

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

Después de ejecutar Maven clean install, se genera un WAR con:

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

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

+1

Esto fue útil para mi caso de uso, pero no para la pregunta hecha, que es sobre los archivos 'persistence.xml' en JAR constituyentes (posiblemente de WAR), en lugar de hacerlo directamente en WAR. Sin embargo, el consejo 'WEB-INF/classes/META-INF' es bastante útil. –

2

En el archivo maven pom.xml debe agregar el directorio de recursos, por lo que no tiene que agregarlo manualmente a la ruta de compilación en eclipse.

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

véase: http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html

+4

debe ponerlo en 'src/main/resources' en su lugar, que es el valor predeterminado maven y se agrega automáticamente –

+0

eso es verdad, gracias por señalar esto – eeezyy

Cuestiones relacionadas