2011-11-24 30 views
10

Tôi đặt một tệp jaxb.properties trong gói nơi các lớp của tôi là nơi tôi sử dụng một nhà cung cấp JAXB khác (như được thấy trong liên kết này Specifying EclipseLink MOXy as Your JAXB Provider) mà tôi sử dụng cho unmarshalling.tệp jaxb.properties từ gói java không có trong Maven được xây dựng .war

Sau đây xảy ra:

  • Khi tôi chạy dự án từ Eclipse/STS các unmarshalling hoạt động OK, kể từ khi nó đọc file jaxb.properties.

  • Khi tôi xây dựng dự án với Maven 3 (mvn clean install), tệp jaxb.properties không được bao gồm trong gói - do đó các lớp đó không thể unmarshall tệp XML thành công. Sau đó, tôi phải tự đặt tệp jaxb.properties bằng cách điều hướng đến ứng dụng được triển khai, nhập gói và dán tệp.

Giải pháp? Cảm ơn!

Trả lời

10

Bạn nên đặt các tài nguyên (như jaxb.properties) vào src/main/resources.
Tôi chưa thể tìm thấy bất kỳ bằng chứng/tài liệu nào, nhưng tôi chắc chắn rằng con quạ sẽ chỉ biên dịch và sao chép .java tệp từ thư mục src.

Từ tài liệu có vẻ rõ ràng, biên dịch đó sẽ chỉ biên dịch và không sao chép bất kỳ thứ gì. Do đó chỉ. java tệp dưới src/main/java sẽ được xử lý và mọi thứ khác bị bỏ qua.

Tài nguyên được xử lý bởi resources:resources, được thực thi tự động. Mục tiêu này sao chép tài nguyên từ src/main/resources.

Compile chỉ biên dịch tệp từ thư mục src. Các tệp tài nguyên không phải là các tệp java và do đó sẽ không được sao chép/biên dịch vào thư mục đầu ra.

+0

sẽ kiểm tra xem nó sẽ làm việc theo cách này và cung cấp thông tin phản hồi .. –

+0

Did it work? Bạn giải quyết vấn đề này như thế nào? – HDave

+0

@HDave Tôi tin rằng anh ta đặt các thuộc tính vào src/main/resources – oers

12

Như các con trỏ được gợi ý, đặt cược tốt nhất của bạn là sử dụng maven-resources-plugin để đạt được điều này.

 <plugin> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>2.5</version> 
      <executions> 
       <execution> 
        <id>copy-resources</id> 
        <phase>validate</phase> 
        <goals> 
         <goal>copy-resources</goal> 
        </goals> 
        <configuration> 
         <outputDirectory>${basedir}/target/classes/path/to/model/</outputDirectory> 
         <resources> 
          <resource> 
           <directory>${basedir}/src/main/resources/</directory> 
           <includes> 
            <include>jaxb.properties</include> 
           </includes> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Nơi tập jaxb.properties của bạn trong directory và xác định vị trí gói (outputDirectory) và điều này sẽ sao chép các tài nguyên trước khi đóng gói.

+0

Điều này làm việc như một say mê. – webDeveloper

+0

trong trường hợp của tôi là ' xác thực 'một phần sai, bởi vì thư mục không tồn tại ở giai đoạn đó, tôi giả sử. Tôi đã thay đổi nó thành ' tài nguyên quy trình' và giờ nó hoạt động – kiedysktos

0

thêm vào pom.xml của bạn

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