Befindet sich der JPA-Klassenpfad persistence.xml?

8

Hier ist, was ich versuche zu tun. Ich verwende JPA-Persistenz in einer Webanwendung, aber ich habe eine Reihe von Komponententests, die ich außerhalb eines Containers ausführen möchte.

Ich habe mein primäres persistence.xml im Ordner META_INF meiner Haupt-App und es funktioniert großartig im Container (Glassfish).

Ich habe eine zweite persistence.xml im Ordner META-INF meines Verzeichnisses test-classes abgelegt. Dies enthält eine separate Persistenzeinheit, die ich nur für den Test verwenden möchte. In Eclipse habe ich diesen Ordner im Klassenpfad höher platziert als im Standardordner und es scheint zu funktionieren.

Wenn ich jetzt den Maven-Build direkt von der Befehlszeile aus starte und versuche, die Komponententests auszuführen, wird die persistence.xml -Überschreibung ignoriert. Ich kann die Überschreibung im Ordner META-INF des von maven generierten test-classes -Verzeichnisses sehen, und ich habe erwartet, dass die Maven-Tests diese Datei verwenden, aber das ist es nicht. Meine Spring Test Konfiguration Overrides, die in ähnlicher Weise erreicht werden, funktionieren.

Ich bin verwirrt darüber, ob die persistence.xml durch den Klassenpfad lokalisiert ist. Wenn dies der Fall wäre, sollte meine Überschreibung wie die Spring-Überschreibung funktionieren, da das maven todsichere Plugin erklärt "[Das Testklassenverzeichnis] ​​wird am Anfang des Testklassenpfads enthalten".

Habe ich fälschlicherweise angenommen, wie die Datei persistence.xml gefunden wurde?

Ich konnte (und habe) eine zweite Persistenzeinheit in der Produktionsdatei persistence.xml erstellen, aber es fühlt sich dreckig an, die Testkonfiguration in diese Produktionsdatei zu stellen. Andere Ideen, wie ich mein Ziel erreichen kann, sind willkommen.

    
Vinnie 14.04.2010, 14:59
quelle

2 Antworten

3

persistence.xml wird aus dem Klassenpfad geladen; In der Vergangenheit habe ich genau das gemacht, was du beschrieben hast.

Es ist höchstwahrscheinlich ein Problem mit Maven. Sie können den Maven-Klassenpfad debuggen, indem Sie ihn mit der Option -X ausführen.

    
Ken Liu 14.04.2010, 15:22
quelle
4

Es ist unklar, wo Sie die "zweite" persistence.xml (die Testversion) platziert haben, aber Sie sollten sie in src/test/resources/META-INF platzieren. Testressourcen werden automatisch zu dem Klassenpfad hinzugefügt, der von Maven für Ihre Komponententests eingerichtet wurde, und haben Vorrang vor Ressourcen, die in src/main/resources platziert wurden.

    
Pascal Thivent 14.04.2010 15:29
quelle