2012-11-05 1 views
6

Ho un'app web Java, in cui ho alcune cartelle all'interno della directory sorgente webapp standard (src/main/webapp) che non voglio copiare nel guerra (exploded o packaged).Come escludere i file dalla copia esplosa, nella guerra esplosa

Uno dei motivi per cui non voglio copiare questi file è che eseguiamo il compressore YUI JS & CSS minimizer & nei file .js e .css all'interno della guerra esplosa. I file che voglio escludere producono errori durante la fase di compressione. L'altro motivo per cui non voglio che si aggiungano alla guerra è che supportano il test di un'applicazione JS a singola pagina che vive all'interno della webapp (sono script di test JS lato client che si basano su node/angular.js).

Qui di seguito sono le sezioni pertinenti del 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> 

ho cercato, senza successo, di usare warSourceExcludes per escludere determinati percorsi, ma senza alcun risultato. Un esempio del mio utilizzo è mostrato di seguito, in cui client/ è una cartella direttamente sotto src/main/webapp:

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

Qual è il modo corretto per escludere determinati percorsi, e o singoli file, all'interno della directory Web di origine app venga incluso nel la guerra esplosa?

UPDATE

Dopo il suggerimento di @maba ho aggiornato la configurazione come segue:

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

La cartella, client/, comunque è sempre copiato in tutto. Qualche idea?

+1

warSourceExcludes è documentata come una stringa separata da virgole, quindi non ci dovrebbe essere alcun XML in là . http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html La domanda –

+0

è stata aggiornata per riflettere l'uso corretto, tuttavia non funziona ancora per me. – Kris

+0

Sospetto che ci sia un ulteriore problema con il mio 'pom.xml'. Cercherò se questa settimana con un progetto incontaminato generato da un archetipo – Kris

risposta

6

Grazie a @alexksandr & @maba per le loro risposte - che, sebbene corrette, non risolvono completamente il problema.

La soluzione sembra essere, anche se non sono sicuro del perché questo sia il caso, che la sezione di configurazione non venga rilevata quando viene inserita nella sezione execution.

Prendendo il mio pom originale.xml e re-factoring per renderlo lavoro dà:

<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> 

Il dettaglio importante sembra essere che la configurazione dovrebbe essere al livello più alto del plugin e non all'interno della sezione execution - anche se chiaramente il xml nel mio il primo tentativo di usare warSourceExcludes era lontano dalla destinazione (vedere la domanda originale prima della sezione di aggiornamento).

+0

Ecco come funzionano i plugin maven. Hanno una configurazione vincolata ad essere eseguita in una configurazione ** OR ** per l'esecuzione della riga di comando. Dai un occhiata a ['maven-dependency-plugin'] (https://maven.apache.org/plugins/maven-dependency-plugin/usage.html) come esempio. È abbastanza specifico su come le due parti di configurazione differiscono. I tuoi requisiti non erano completamente chiari. Ma è bello che ora hai una configurazione funzionante. – maba

+0

grazie per il chiarimento - e apollogie se non ho descritto correttamente il problema (probabilmente a causa mia non ottenendo davvero i dettagli più fini di Maven). Ma grazie ancora maba @aleksandr per il tuo aiuto! – Kris

+0

Se hai trovato le nostre risposte utili/utili, allora devi svalutarle. E accetta la tua risposta, se è quella che hai trovato la soluzione migliore. – maba

1

Il tuo warSourceExcludes è sbagliato. Ecco ciò che il maven-war-plugin dice riguardanti warSourceExludes:

La virgola elenco di token separati da escludere quando si copia il contenuto del warSourceDirectory.

Quindi nel tuo caso questo è ciò che la vostra configurazione dovrebbe essere simile:

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

Questo significa anche che se si vuole aggiungere un po 'di più esclude, basta aggiungere loro separati da una virgola:

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

Ciao, prima cosa grazie per la risposta. Ho appena provato il tuo suggerimento senza fortuna, aggiornerò la mia domanda per includere ciò che ho provato. grazie – Kris

+0

Ho provato con il tuo setup e ho ottenuto una cartella in 'target' che finisce con' -work' e in quella cartella non c'è alcun segno della directory 'client'. – maba

+0

Vuoi creare una guerra con lo stesso layout? O la guerra esplosa è l'unico risultato che vuoi? – maba

1

al fine di escludere tutti i file dalla cartella di caratteri jolly uso come quella client/**

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

sono riuscito a trovare alcuna configurazione di < warSourceExcludes> che ha lavorato, però < packagingExcludes> ha funzionato:

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

Questo ha risolto il mio problema con minify-maven-plugin, che manteneva i file concatenati nella mia .war, anche con l'uso di . – Cesar

+0

nota che 'packagingExcludes' esclude solo dal file' .war', non dalla cartella esplosa – jediz