2010-08-27 39 views
6

Tôi đang sử dụng Maven 2 và Hibernate cho ứng dụng web Java.Tại sao maven không đóng gói tệp ánh xạ ngủ đông của tôi?

Tôi có tệp ánh xạ Hibernate, Domain.hbm.xml trong cùng thư mục nguồn với một số lớp miền.

Nếu tôi chạy mvn clean package Tôi thấy tệp này không được sao chép vào tệp chiến tranh trong thư mục đích.

Tuy nhiên, nếu tôi chỉ mvn clean và sau đó chuyển đến nhật thực và chọn Làm sạch từ menu Dự án, tệp sẽ được gửi đến vị trí thích hợp trong mục tiêu. Sau đó tôi có thể thực hiện mvn package để gói thành công tệp chiến tranh có quyền truy cập vào cơ sở dữ liệu.

Thiết lập pom cho điều này? Chuyện gì vậy?

+0

bạn có chắc chắn tệp xml của mình nằm trong thư mục tài nguyên không? – mhshams

Trả lời

9

Tài nguyên không phải là nguồn Java bạn muốn kết thúc trực tiếp trên đường dẫn lớp (trong trường hợp của bạn bên trong/WEB-INF/classes) phải nằm trong thư mục src/main/resources, chứ không phải src/main/java.

12

Nếu tôi chạy gói sạch mvn Tôi thấy tệp này không được sao chép vào tệp chiến tranh trong thư mục đích.

Sau đó, các tập tin bản đồ có lẽ không nằm trong thư mục tài nguyên mặc định (src/main/resources) nhưng trong thư mục nguồn (src/main/java) và Maven sẽ không sao chép chúng vào thư mục build đầu ra theo mặc định.

Tuy nhiên, nếu tôi chỉ làm sạch mvn và sau đó chuyển đến nhật thực và chọn Làm sạch từ trình đơn Dự án, tệp sẽ được gửi đến vị trí thích hợp trong mục tiêu. Sau đó tôi có thể thực hiện gói mvn để gói thành công tệp chiến tranh có quyền truy cập vào cơ sở dữ liệu.

Theo Eclipse, tôi đoán là tệp từ thư mục nguồn được sao chép vào thư mục đầu ra xây dựng, bao gồm tệp tài nguyên ứng dụng. Vì vậy, điều này bằng cách nào đó "lừa" Maven khi bạn chạy package sau bước sạch Eclipse. Nhưng điều này không thực sự quan trọng, chủ nhân là Maven, mọi thứ khác đều không liên quan.

Để khắc phục, hãy di chuyển tệp ánh xạ của bạn sang src/main/resources. Hoặc giữ chúng trong src/main/java và khai báo thư mục nguồn như một thư mục tài nguyên "thêm":

<build> 
    <resources> 
    <resource> 
     <directory>src/main/resources</directory> 
    </resource> 
    <resource> 
     <directory>src/main/java</directory> 
     <excludes> 
     <exclude>**/*.java</exclude> 
     </excludes> 
    </resource> 
    </resources> 
</build> 

Một số người làm được điều này, tôi thích sử dụng thư mục riêng biệt.

0

Tôi gặp vấn đề tương tự. Điều này giải quyết được vấn đề của tôi.

<sourceDirectory>src/main/java</sourceDirectory> 
    <resources> 
     <resource> 
      <directory>src/main/java</directory> 
       <includes> 
        <include>**/*.xml</include> 
        <include>**/*.properties</include> 
       </includes> 
     </resource> 
    </resources> 
Các vấn đề liên quan