2012-11-05 11 views
5

Właśnie "odkryłem", że mamy dwa foldery Meta-Inf ... W Eclipse, a także w pliku wojny.Dwa foldery Meta-Inf - normalna struktura?

Pierwszy z nich to (w czasie wojny):

/META-INF/

Druga i dziwne jeden ist:

/WEB-INF/classes/META-INF/

W drugim folderze znajduje się persistance.xml i something.taglib.xml ...

Jeśli mogę przenieść pliki do pierwszego meta-inf folderu otrzymuję wyjątki od hibernacji ..

Jaki jest cel tego drugiego i dziwnie umieszczonego foldera meta-inf?

Czy to normalna struktura folderów?

Odpowiedz

7

Lokalizacja "dziwna" jest prawidłowa; JSR-220/JSR-317 (Java Trwałość API 1,0/2,0), w punkcie 6.2/8.2 znaczy:

Plik słoik lub katalogu którego meta-INF zawiera plik persistence.xml jest określany jako korzeń jednostka wytrwałości. W Java EE, korzeń jednostki utrwalania może być jedną z następujących czynności:

  • plik EJB-JAR
  • WEB-INF/classes katalogu pliku WAR
  • pliku jar w WEB-INF lib pliku WAR
  • pliku jAR w katalogu głównym EAR/*
  • plik jar w katalogu biblioteki EAR
  • plik jar aplikacji klient.

*) Tylko ważne dla JPA 1.0

Więc bezpośrednio w pliku WAR, jedyna prawidłowa lokalizacja jest WEB-INF/classes/META-INF/.

+0

Czy powinienem wziąć zawartość "niewłaściwego" (zawiera tylko plik MANIFEST.MF) i wkleić go do "właściwego"? (A następnie usuń błędnie umieszczony META-INF) –

+1

Nie, root META-INF nie jest źle * per se *, albo - nie jest przeznaczony do przechowywania pliku persistence.xml. META-INF/MANIFEST.MF jest deskryptorem archiwum jar/war/ear. Ten plik jest jedyną rzeczą, która sprawia, że ​​format jar/war/ear różni się od zwykłego pliku zip. – MaDa

+0

Więc "normalne", a nawet konieczne jest posiadanie dwóch META-INFów? –

Powiązane problemy