2009-08-19 33 views
38

Tôi có một dự án WAR rất đơn giản và tôi muốn bao gồm một thư mục có tên META-INF ở đầu thư mục đầu ra của lớp. Tôi đang sử dụng Maven, nhưng dường như Maven mặc định sẽ không bao gồm bất kỳ thứ gì không phải là một lớp Java. Vì vậy, nó bỏ qua thư mục META-INF của tôi đang nằm ở đầu thư mục src. Thư mục META-INF chứa tệp có tên persistence.xml. Bất kỳ gợi ý nhanh nào về cách hướng dẫn Maven đưa thư mục và tệp này vào thư mục đầu ra?Maven: Bao gồm thư mục META-INF trong thư mục lớp học

+1

Great câu hỏi, cảm ơn. –

Trả lời

11

Maven muốn loại thông tin này trong thư mục tài nguyên. Xem here để biết thêm thông tin.

Project 
|-- pom.xml 
`-- src 
    `-- main 
     |-- java 
     `-- resources 

Để chỉ định thư mục tài nguyên bổ sung, hãy xem here.

4

Tôi sẽ trả lời gián tiếp câu hỏi của bạn bằng cách nói rằng nếu bạn đã thực hiện bước nhảy tới Maven2, tôi chắc chắn khuyên bạn nên sử dụng Plugin Archetype. Sử dụng mẫu webapp sẽ đảm bảo bạn kết thúc với cấu trúc thư mục chuẩn. Bất cứ ai khác nhìn vào nguồn của bạn sẽ ngay lập tức biết được mọi thứ ở đâu và sẽ không có bất kỳ câu hỏi nào về vị trí tệp của bạn.

81

Nói chung, đối với dự án Maven dựa trên Java, các tệp không phải nguồn phải nằm trong thư mục con src/main/resources của dự án. Nội dung của thư mục resources được sao chép vào thư mục đầu ra (theo mặc định, target/classes) trong giai đoạn quy trình nguồn lực của bản dựng.

Đối với dự án Maven WAR, nó phức tạp hơn một chút: đó cũng là thư mục src/main/webapp, trong đó Maven sẽ tìm thấy WEB-INF/web.xml. Để xây dựng tệp WAR của bạn, tệp đó phải tồn tại; nếu không, bạn sẽ thấy một thông báo lỗi như thế này:

[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) 

Như thư mục WEB-INF phải tồn tại dưới src/main/webapp, tôi khuyên bạn nên tránh định nghĩa nó một lần nữa trong src/main/resources. Mặc dù điều này là hoàn toàn hợp lệ và nội dung của hai thư mục sẽ được hợp nhất, nó có thể gây nhầm lẫn nếu một tệp được định nghĩa trong cả hai. Nội dung của src/main/resources sẽ được ưu tiên khi chúng được sao chép trên đầu nội dung từ src/main/webapp.

+2

Tôi yêu bạn! – willcodejavaforfood

+1

Bài đăng của bạn giải quyết được lỗi của tôi! Cảm ơn! Cho bạn! –

+0

Vì vậy, đã làm của tôi, công việc tốt buddy – myro

0

Cho mục dưới đây trong pom.xml

<plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.1.1</version> 
       <configuration> 
        <!--webappDirectory>/sample/servlet/container/deploy/directory</webappDirectory--> 
        <packagingExcludes>**/web.xml</packagingExcludes> 
       </configuration> 
      </plugin> 
4

Đặt này vào pom.xml:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-war-plugin</artifactId> 
      <version>2.1.1</version> 
      <configuration> 
       <failOnMissingWebXml>false</failOnMissingWebXml> 
      </configuration> 
     </plugin> 
+3

Bạn nên thêm một số văn bản meta – keyser

Các vấn đề liên quan