2012-06-03 14 views
34

Al lavoro abbiamo una libreria di entità che viene utilizzata da diversi client per la libreria (diversi servlet, un'applicazione desktop, ecc.). La libreria delle entità è costituita da classi annotate con JPA e, in particolare, da persistence.xml.Dove mettere persistence.xml nel jar della libreria usando maven?

Tutti i progetti sono configurati utilizzando Maven.

Dove deve essere inserito un file persistence.xml? Deve trovarsi all'interno del file jar di quella libreria di entità e non sono sicuro di come configurarlo usando Maven.

(Ci sono solo frazionamento di un progetto in diversi progetti di piccole dimensioni)

'' 'UPDATE' '' Per essere chiari su questo, c'è un Maven-Progetto A che contiene il persistence.xml e un altro (B) che dipende da quel Progetto. Ho posto persistence.xml in src/main/resources/META-INF/persistence.xml in A, quando provo ad usare un EntityManager in A, nessun problema, insidie ​​B: niente funziona.

EclipseLink dà il seguente avviso:

[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 

Ho il sospetto che il persistence.xml non viene trovato, ma è presente nel vaso bersaglio.

risposta

69

Come @Dave menziona sopra src/main/resources è il posto. Quando si tratta di persistence.xml, deve essere inserito nella cartella META-INF. Quindi per concludere: src/main/resources/META-INF/persistence.xml.

+3

ha funzionato perfettamente per me. Dovevo creare una cartella META-INF e inserire in essa il persistence.xml. – Sorter

6

I file di configurazione XML appartengono quasi sempre a src/main/resources, in una gerarchia di pacchetti (proprio come i file di origine Java). Questi file verranno copiati nell'artefatto nella stessa gerarchia.

10

ho ottenuto solo persistence.xml per lavorare nella mia guerra, quando sono immessi in WEB-INF/classes/META-INF, così come la documentazione consiglia:

http://docs.oracle.com/cd/E19159-01/819-3669/bnbrj/index.html afferma quanto segue:

Se si impacchetta l'unità di persistenza come un insieme di classi in un file WAR, persistence.xml deve trovarsi nella directory file WEB/INF/META-INF del file WAR.

Nei miei Eclipse puntelli del progetto, ho aggiunto questo al percorso di generazione:

src\main\resources

progetto My Maven ha persistence.xml al seguente indirizzo:

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

Dopo aver eseguito Maven clean install, viene creato un WAR con:

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

Quando rilascio questo WAR nella cartella webapps di Tomcat 7, viene distribuito correttamente e JPA funziona.

+1

Questo è stato utile per il mio caso d'uso, ma non per la domanda posta, che riguarda i file 'persistence.xml' nei JAR costituenti (possibilmente di una WAR), piuttosto che direttamente nella WAR. Il suggerimento 'WEB-INF/classes/META-INF' è arcana piuttosto utile, comunque! –

2

Nel file maven pom.xml è necessario aggiungere la directory delle risorse, quindi non è necessario aggiungerlo manualmente al percorso di build in eclissi.

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

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

+4

dovresti metterlo in 'src/main/resources', invece, che è il default di default e viene aggiunto automaticamente –

+0

è vero, grazie per averlo indicato – eeezyy

Problemi correlati