2013-07-12 28 views
5

Tôi có một ứng dụng doanh nghiệp mà tôi đang trong quá trình chuyển đổi từ bản dựng Ant thành Maven. Nó gần như hoàn toàn được chuyển đổi; đây là điều cuối cùng tôi cần phải sửa chữa. Ứng dụng này được đóng gói như một tệp EAR chứa hai WAR và có một mô-đun JAR cung cấp tất cả các chức năng cốt lõi của ứng dụng.Tại sao plugin Maven JAR không bao gồm một số tài nguyên?

Tôi đang sử dụng thư viện tạo mẫu Freemarker để tạo ra, trong số những thứ khác, nội dung thư cho email tự động do ứng dụng gửi. Freemarker cần các tệp mẫu * .ftl của nó trên đường dẫn lớp, và vì đây là chức năng ứng dụng cốt lõi không cụ thể cho một WAR hoặc khác, nó cần phải có trong JAR.

Module Maven trong đó xác định JAR có POM sau:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <relativePath>../../pom.xml</relativePath> 
     <groupId>com.company.project</groupId> 
     <artifactId>projectName</artifactId> 
     <version>1.8.0</version> 
    </parent> 

    <artifactId>core</artifactId> 
    <packaging>jar</packaging> 
    <name>Core Application</name> 

    <profiles> 
     <!-- snip --> 
    </profiles> 

    <dependencies> 
     <!-- snip --> 
    </dependencies> 

    <build> 
     <resources> 
      <resource> 
       <directory>src/main/resources</directory> 
       <filtering>true</filtering> 
       <includes> 
        <include>**/*.ftl</include> 
        <include>**/*.properties</include> 
        <include>**/*.xml</include> 
       </includes> 
      </resource> 
     </resources> 
     <plugins> 
      <!-- snip --> 
     </plugins> 
    </build> 
</project> 

Các tập tin * .ftl được đặt tại src/main/nguồn/template /, với một số trong một thư mục con trong mẫu /. Có các tệp khác trong src/main/resources - một số .properties và một số .xml, một số ở gốc và một số dưới cấu trúc thư mục.

Khi tôi chạy giai đoạn gói trên mô-đun này (hoặc trên phụ huynh), thư mục đích/lớp được tạo ra như một phần của quá trình xây dựng chứa thư mục mẫu, chứa tất cả * .ftl, *. tệp xml và * .properties có cấu trúc thư mục thích hợp. Nếu tôi JAR thư mục này lên bằng tay, mọi thứ hoạt động hoàn hảo. Đây là nơi điều này trở nên kỳ lạ và tôi bị lạc: khi maven-jar-plugin tạo ra JAR, nó bao gồm các tệp XML và các thuộc tính, nhưng thư mục mẫu hoàn toàn không có trong JAR và nội dung của nó không có ở đâu .

Như bạn có thể thấy ở trên, tôi đã thử rõ ràng bao gồm **/*. Ftl. Nó không tạo ra sự khác biệt; Tôi có thể loại trừ toàn bộ thẻ "bao gồm" và tôi nhận được hành vi giống hệt nhau.

Tôi đang sử dụng Maven 3.0.5 và maven-jar-plugin 2.4.

Trả lời

10

Tôi đã tìm ra câu trả lời RIGHT sau khi gửi câu hỏi này.

Trong một POM mẹ, tôi đã có những điều sau đây:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <includes> 
      <include>**/*.class</include> 
      <include>**/*.jdo</include> 
      <include>**/*.properties</include> 
      <include>**/*.xml</include> 
     </includes> 
    </configuration> 
</plugin> 

tôi thêm \*\*/*.ftl vào danh sách bao gồm và bây giờ nó làm việc.

EDIT: Tốt hơn hết, tôi đã xóa hoàn toàn thẻ cấu hình và thẻ vẫn hoạt động. Tôi nghĩ rằng đó là một phần còn lại từ trước khi tôi phát hiện ra rằng các tập tin .properties và những thứ khác tôi cần trên classpath cần phải ở trong src/main/resources và không phải là src/main/java.

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