2012-11-05 21 views
5

Tôi chỉ "phát hiện" rằng chúng tôi có hai thư mục Meta-Inf ... Trong nhật thực và cũng trong tệp Chiến tranh.Hai thư mục Meta-Inf - cấu trúc bình thường?

Người đầu tiên là (trong chiến tranh):

/META-INF/

thứ hai, và lạ một ist:

/WEB-INF/classes/META-INF/

Trong thư mục thứ hai là một persistance.xml và something.taglib.xml ...

Nếu tôi di chuyển các tập tin vào thư mục meta-inf đầu tiên tôi nhận được ngoại lệ từ ngủ đông ..

Mục đích của thư mục meta-inf thứ hai và được đặt kỳ quặc này là gì?

Đây có phải là cấu trúc thư mục thông thường không?

Trả lời

7

Vị trí "kỳ lạ" là chính xác; JSR-220/JSR-317 (Java Persistence API 1.0/2.0) trong phần 6.2/8.2 nói:

Tệp hoặc thư mục jar có thư mục META-INF có chứa tệp persistence.xml được gọi là gốc của tệp đơn vị bền bỉ. Trong Java EE, thư mục gốc của một đơn vị bền vững có thể là một trong những cách sau:

  • một file EJB-JAR
  • thư mục WEB-INF/classes của một tập tin WAR
  • một file jar trong WEB-INF/lib thư mục của một tập tin WAR
  • một file jar trong thư mục gốc của EAR *
  • một file jar trong thư mục thư viện EAR
  • một tập tin ứng dụng client jar.

*) Chỉ hợp lệ cho JPA 1,0

Vì vậy, trực tiếp trong một tập tin WAR, chỉ đúng vị trí là WEB-INF/classes/META-INF/.

+0

Vì vậy, tôi nên lấy nội dung của 'sai' một (nó chỉ chứa tệp MANIFEST.MF) và dán nội dung đó vào 'đúng'? (Và sau đó xóa sai đặt META-INF) –

+1

Không, gốc META-INF cũng không sai * cho mỗi *, hoặc - nó chỉ không có ý định giữ persistence.xml. META-INF/MANIFEST.MF là một bộ mô tả lưu trữ của jar/war/ear. Tệp này là thứ duy nhất làm cho định dạng jar/war/ear khác với tệp zip thuần túy. – MaDa

+0

Vì vậy, nó là 'bình thường' hoặc thậm chí cần thiết để có hai META-INF? –