2012-11-05 5 views
5

Ich habe gerade "entdeckt", dass wir zwei Meta-Inf-Ordner haben ... In Eclipse und auch in der War-Datei.Zwei Meta-Inf-Ordner - normale Struktur?

Die erste ist (im Krieg):

/META-INF/

Die zweite und sonderbares ist:

/WEB-INF/classes/META-INF/

im zweiten Ordner ist ein persistance.xml und something.taglib.xml ...

Wenn ich die Dateien in den ersten Meta-inf-Ordner verschieben i Ausnahmen von Hibernate bekommen ..

Was ist der Zweck dieses zweiten und seltsam platzierten Meta-Inf-Ordners?

Ist das eine normale Ordnerstruktur?

Antwort

7

Der "seltsame" Standort ist korrekt; JSR-220/JSR-317 (Java Persistence API 1.0/2.0) in Kapitel 6.2/8.2 sagen:

die JAR-Datei oder das Verzeichnis, deren META-INF Verzeichnis enthält die Datei persistence.xml die Wurzel der bezeichnet wird, Persistenzeinheit. In Java EE kann die Wurzel einer Persistenzeinheit eine der folgenden sein:

  • eine EJB-JAR-Datei
  • die WEB-INF/classes einen WAR-Datei
  • eine JAR-Datei in der WEB-INF/lib-Verzeichnis einen WAR-Datei
  • eine jAR-Datei in dem Stammverzeichnis der EAR *
  • eine jAR-Datei in dem EAR-Bibliotheksverzeichnis
  • eine Anwendungs-Client-jAR-Datei.

*) Nur gültig für JPA 1.0

So direkt in einer WAR-Datei, der einzig richtige Standort ist WEB-INF/classes/META-INF/.

+0

Also sollte ich den Inhalt der "falschen" nehmen (es enthält nur die Datei MANIFEST.MF) und fügen Sie diese in die "richtige" ein? (Und dann lösche die falsch platzierte META-INF) –

+1

Nein, die Wurzel META-INF ist auch an sich * nicht falsch - sie ist nur nicht dazu gedacht, die persistence.xml zu halten. META-INF/MANIFEST.MF ist ein Archivdeskriptor von jar/war/ear. Diese Datei ist die einzige Sache, die das jar/war/ear-Format von einer einfachen Zip-Datei unterscheidet. – MaDa

+0

Also ist es "normal" oder sogar notwendig, zwei META-INF's zu haben? –