2012-11-05 29 views
6

Tôi có một ứng dụng web Java, trong đó tôi có một số thư mục trong thư mục nguồn webapp tiêu chuẩn (src/main/webapp) mà tôi không muốn sao chép vào chiến tranh (exploded hoặc packaged).Cách loại trừ các tệp bị sao chép, bởi maven, vào cuộc chiến bùng nổ

Một trong những lý do tôi không muốn sao chép các tệp này là chúng tôi chạy trình tối ưu hóa CSS YUI JS & CSS & nén trên các tệp .js và .css trong cuộc chiến bùng nổ. Các tệp mà tôi muốn loại trừ tạo ra lỗi trong giai đoạn nén. Lý do khác tôi không muốn họ thêm vào chiến tranh là họ hỗ trợ thử nghiệm một ứng dụng JS trang duy nhất sống trong webapp (chúng là các kịch bản lệnh thử nghiệm JS phía máy khách dựa trên node/angular.js).

Dưới đây là những bộ phận có liên quan từ POM.xml:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <executions> 
    <execution> 
     <id>parent-resources</id> 
     <configuration> 
     <failOnMissingWebXml>false</failOnMissingWebXml> 
     <overlays> 
     </overlays> 
     <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
     </configuration> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>exploded</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Tôi đã cố gắng, nhưng không thành công, sử dụng warSourceExcludes để loại trừ những con đường nhất định, nhưng vô ích. Một ví dụ về sử dụng của tôi được hiển thị bên dưới, nơi client/ là một thư mục trực tiếp bên dưới src/main/webapp:

<configuration> 
    ... 
    <warSourceExcludes> 
    <excludes> 
     <exclude> 
     client/ 
     </exclude> 
    </excludes> 
    </warSourceExcludes> 
    ... 
</configuration> 

cách chính xác để loại trừ những con đường nhất định là gì, và hoặc các tập tin cá nhân, trong thư mục nguồn ứng dụng web từ được đưa vào cuộc chiến bùng nổ?

CẬP NHẬT

Tiếp theo từ gợi ý từ @maba tôi cập nhật cấu hình như sau:

<configuration> 
    <failOnMissingWebXml>false</failOnMissingWebXml> 
    <overlays> 
    </overlays>         
    <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
    <warSourceExcludes>client/</warSourceExcludes> 
</configuration> 

Thư mục, client/, vẫn là nhận được sao chép qua. Bất kỳ ý tưởng?

+1

warSourceExcludes được ghi chép lại như là một chuỗi bằng dấu phẩy, vì vậy không nên có bất kỳ XML trong đó . http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html –

+0

câu hỏi đã được cập nhật để phản ánh việc sử dụng chính xác - vẫn không hoạt động đối với tôi. – Kris

+0

Tôi nghi ngờ rằng có thêm một vấn đề với 'pom.xml' của tôi. Tôi sẽ xem xét liệu những tuần này với dự án nguyên sơ được tạo ra từ một nguyên mẫu – Kris

Trả lời

6

Nhờ @alexksandr & @maba cho câu trả lời của họ - mặc dù chính xác không giải quyết được hoàn toàn vấn đề của tôi.

Giải pháp có vẻ là - mặc dù tôi không chắc chắn chính xác vì sao đây là trường hợp - phần cấu hình không được chọn khi được đặt trong phần execution.

Lấy pom gốc của tôi.xml và tái Sacombank nó để làm cho nó làm việc cho:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
    <failOnMissingWebXml>false</failOnMissingWebXml> 
    <overlays> 
    </overlays> 
    <webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
    <warSourceExcludes>client/</warSourceExcludes> 
    </configuration> 
    <executions> 
    <execution> 
     <id>parent-resources</id> 
     <phase>generate-sources</phase> 
     <goals> 
     <goal>exploded</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Các chi tiết quan trọng là nên chọn các cấu hình nên ở cấp cao nhất của plugin và không nằm trong phần execution - mặc dù rõ xml trong tôi lần đầu tiên sử dụng warSourceExcludes là cách tắt mục tiêu (xem câu hỏi gốc trước phần cập nhật).

+0

Đó là cách các plugin maven hoạt động. Chúng có cấu hình bị ràng buộc để được thực hiện trong một cấu hình build ** OR ** để thực thi dòng lệnh. Hãy xem ['maven-dependency-plugin'] (https://maven.apache.org/plugins/maven-dependency-plugin/usage.html) làm ví dụ. Nó khá cụ thể về cách hai phần cấu hình khác nhau. Yêu cầu của bạn không hoàn toàn rõ ràng. Nhưng nó tốt đẹp mà bây giờ bạn có một cấu hình làm việc. – maba

+0

cảm ơn cho việc làm rõ - và apollogies nếu tôi đã không mô tả vấn đề một cách chính xác (có lẽ là do tôi không thực sự nhận được các chi tiết tốt hơn của maven). Nhưng cảm ơn một lần nữa maba @aleksandr vì sự giúp đỡ của bạn! – Kris

+0

Nếu bạn tìm thấy câu trả lời của chúng tôi hữu ích/hữu ích thì hãy upvote chúng. Và chấp nhận câu trả lời của riêng bạn nếu đó là những gì bạn thấy là giải pháp tốt nhất. – maba

1

warSourceExcludes của bạn không đúng. Dưới đây là những gì các maven-war-plugin nói về warSourceExludes:

Dấu phẩy tách ra danh sách các thẻ để loại trừ khi sao chép nội dung của warSourceDirectory.

Vì vậy, trong trường hợp của bạn đây là những gì cấu hình của bạn sẽ giống như thế:

<configuration> 
    ... 
    <warSourceExcludes>client/</warSourceExcludes> 
    ... 
</configuration> 

này cũng có nghĩa rằng nếu bạn muốn thêm một số không bao gồm hơn, chỉ cần thêm chúng tách bằng dấu phẩy:

<configuration> 
    ... 
    <warSourceExcludes>client/,otherDir/,evenMoreDir/</warSourceExcludes> 
    ... 
</configuration> 
+0

Xin chào, Trước hết là cảm ơn vì phản hồi. chỉ cần thử đề xuất của bạn mà không có may mắn, Sẽ cập nhật câu hỏi của tôi để bao gồm những gì tôi đã thử. thanks – Kris

+0

Tôi đã thử với thiết lập của bạn và tôi nhận được một thư mục trong 'target' kết thúc bằng' -work' và trong thư mục đó không có dấu hiệu của thư mục 'client'. – maba

+0

Bạn có muốn tạo ra một cuộc chiến với bố cục giống nhau không? Hay cuộc chiến bùng nổ là kết quả duy nhất bạn muốn? – maba

1

Để loại trừ tất cả các tệp khỏi thư mục sử dụng ký tự đại diện như vậy client/**

<configuration> 
<failOnMissingWebXml>false</failOnMissingWebXml> 
<overlays> 
</overlays>         
<webappDirectory>${project.build.directory}/${project.build.finalName}-work</webappDirectory> 
<warSourceExcludes>client/**</warSourceExcludes> 
</configuration> 
2

tôi có thể tìm thấy không có cấu hình của < warSourceExcludes> mà làm việc, tuy nhiên < packagingExcludes> làm việc:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.5</version> 
    <configuration> 
     <packagingExcludes>excludeMe/**</packagingExcludes> 
    </configuration> 
    </plugin> 
+0

Điều đó đã giải quyết được vấn đề của tôi với minify-maven-plugin, đó là giữ các tệp được nối trong .war của tôi, ngay cả khi sử dụng . – Cesar

+0

lưu ý rằng 'packagingExcludes' chỉ loại trừ khỏi tệp' .war', không phải từ thư mục đã giải mã – jediz

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