2016-01-05 15 views
5

Tôi có một cấu trúc thư mục như:maven-chiến-plugin: loại trừ tất cả các thư mục nhưng một

screenshot

src 
|__ main 
    |__ java 
    |__ resources 
    |__ webapp 
     |__ css_blue 
     |__ css_green 
     |__ css_red 
     |__ WEB-INF 

nơi có ba thư mục riêng biệt của css (như css_red, css_green, css_blue). Ở đây, tôi muốn bao gồm chỉ một trong số họ dựa trên công tắc -D như:

mvn clean install -Dcss=green 

pom.xml

<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> 
    <groupId>com.faisal.dwr</groupId> 
    <artifactId>chatbox</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <dependencies> 
    <dependency> 
     <groupId>javax</groupId> 
     <artifactId>javaee-api</artifactId> 
     <version>6.0</version> 
     <scope>provided</scope> 
    </dependency> 
    <!-- Spring - MVC --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.2.4.RELEASE</version> 
    </dependency> 
    <!-- Spring Web Security --> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-web</artifactId> 
     <version>4.0.3.RELEASE</version> 
    </dependency> 
    <!-- Spring Security Config --> 
    <dependency> 
     <groupId>org.springframework.security</groupId> 
     <artifactId>spring-security-config</artifactId> 
     <version>4.0.3.RELEASE</version> 
    </dependency> 
    <!-- DWR --> 
    <dependency> 
     <groupId>org.directwebremoting</groupId> 
     <artifactId>dwr</artifactId> 
     <version>3.0.0-RELEASE</version> 
    </dependency> 
    </dependencies> 

    <build> 
     <finalName>${project.artifactId}</finalName> 
     <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <packagingIncludes>css_${css}</packagingIncludes> 
     </configuration> 
     </plugin> 
     </plugins> 
    </build> 
</project> 

Nhưng trong trường hợp này các file và thư mục dưới WEB-INF không có mặt trong .war tập tin cuối cùng.

Trả lời

2

Theo mặc định, thuộc tính packagingIncludes của maven-war-plugin sẽ bao gồm mọi thứ dưới src/main/webapp. Khi bạn ghi đè nó để chỉ định

<packagingIncludes>css_${css}/**</packagingIncludes> 

thì plugin sẽ chỉ bao gồm thư mục đó (và mọi thứ bên dưới) và không WEB-INF nữa. Một giải pháp đơn giản là để lại bao gồm WEB-INF:

<packagingIncludes>WEB-INF/**,css_${css}/**</packagingIncludes> 

Với cấu hình như vậy, tất cả mọi thứ dưới WEB-INF và tất cả mọi thứ dưới css_${css} sẽ được bao gồm trong chiến tranh.


Một giải pháp khác không yêu cầu phải thêm lại thư mục sẽ sử dụng <packagingExcludes> thay thế. Bằng cách này, tất cả các tệp dưới src/main/webapp sẽ được bao gồm, ngoại trừ các tệp mà chúng tôi chỉ định ở đây. Trong trường hợp này, chúng tôi có thể sử dụng cụm từ thông dụng cho biết: loại trừ mọi thứ bắt đầu bằng cssand is not css_${css}.

<packagingExcludes>%regex[css_(?!${css}/).*]</packagingExcludes> 
+0

Bây giờ, điều này hoạt động như một sự quyến rũ. Cảm ơn đã giúp đỡ! Bạn có thể giải thích điều này hoạt động trong '% regex []' –

+0

@MohammadFaisal '?!' Được gọi là "tiêu cực nhìn về phía trước". Tôi liên kết với một câu hỏi về cấu trúc này. Nó khớp với các chuỗi không bắt đầu bằng một chuỗi khác. – Tunaki

+0

một vấn đề tôi đang gặp phải sau khi thêm biểu thức này trong khi cập nhật các phụ thuộc từ nhật thực - 'Một lỗi nội bộ xảy ra trong:" Cập nhật Maven Project ". Sự lặp lại bất hợp pháp gần chỉ số 7 css _ (?! $ {Css} /). * 'Đang trỏ một nhánh ('^') xung quanh' (? ' –

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