2016-01-05 17 views
5

ho una struttura di directory come:Maven-guerra-plugin: escludere tutte le directory, ma un

screenshot

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

dove ci sono tre cartelle separate di css (come css_red, css_green, css_blue). Qui, voglio includere solo uno di loro sulla base del commutatore -D come:

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> 

ma in questo caso i file e le directory sotto WEB-INF non presente nel file finale .war.

risposta

2

Per impostazione predefinita, l'attributo packagingIncludes di maven-war-plugin includerà tutto in src/main/webapp. Quando si ignora a specificare

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

poi il plugin includere solo quella cartella (e tutto ciò che sotto di esso) e non WEB-INF più. Una soluzione semplice è quella di ri-comprendere WEB-INF:

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

Con tale configurazione, tutto sotto WEB-INF e tutto sotto css_${css} saranno inclusi nella guerra.


Un'altra soluzione che non richiede le cartelle ri-aggiungendo sarebbe quella di utilizzare <packagingExcludes> invece. In questo modo verranno inclusi tutti i file sotto src/main/webapp, ad eccezione di quelli che qui specifichiamo. In questo caso, possiamo usare un'espressione regolare che dice: escludere tutto ciò che inizia con cssand is not css_${css}.

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

Ora funziona come un fascino. Grazie per l'aiuto! Potresti spiegare cosa funziona in '% regex []' –

+0

@MohammadFaisal '?!' Si chiama "negative look-ahead". Mi sono collegato a una domanda su questo costrutto. Corrisponde a stringhe che non iniziano con un'altra stringa. – Tunaki

+0

un problema che sto affrontando dopo aver aggiunto questa espressione durante l'aggiornamento delle dipendenze da eclipse - 'Si è verificato un errore interno durante:" Aggiornamento progetto Maven ". Ripetizione illegale vicino all'indice 7 css _ (?! $ {Css} /). * 'Che sta puntando un array ('^') attorno a' (? ' –

Problemi correlati