2010-09-20 12 views
38

Ho provato this per escludere l'intera directory ($ {basedir}/src/main/webapp/webscripts) dal mio file WAR ma non è riuscita. Che c'è?maven2: esclusa directory da WAR

questo non funziona:

<configuration> 
    <webResources> 
     <resource> 
     <directory>${basedir}/src/main/webapp/webscripts</directory> 
     <excludes> 
     <exclude>**/*.*</exclude> 
     </excludes> 
     </resource> 
    </webResources> 
</configuration> 

anche questo:

<configuration> 
    <webResources> 
     <resource> 
     <directory>${basedir}/src/main/webapp</directory> 
     <excludes> 
     <exclude>**/webscripts</exclude> 
     </excludes> 
     </resource> 
    </webResources> 
</configuration> 

Qualcuno può aiutarmi?

+0

Basta spostarlo in una posizione diversa. Perché i webscripts sono in webapp? – khmarbaise

risposta

77

Entrambe le soluzioni non sarebbero d'aiuto, in quanto aggiungerebbero una risorsa aggiuntiva che verrà quindi disattivata. La cartella di origine webapp viene copiata per impostazione predefinita, senza il meccanismo di risorse.

Il meccanismo per disattivare una parte che è attraverso il parametro <warSourceExcludes>, in questo modo:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
     <warSourceExcludes>webscripts/**</warSourceExcludes> 
    </configuration> 
</plugin> 
+15

Solo un'aggiunta, se si desidera escludere più cartelle aggiungendole dopo una virgola, non utilizzare più warSourceExcludes, non funzionerebbe –

+0

come escludere più directory. –

6

Nella versione 2.1-alfa-1, questo è stato chiamato erroneamente warSourceExcludes. Il parametro di destra è packagingExcludes

Esempio di utilizzo (esclude WEB-INF statica/cartella/dalla guerra):

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-war-plugin</artifactId> 
    <version>2.1.1</version> 
    <configuration> 
     <warName>searchservice-web</warName> 
     <packagingExcludes>WEB-INF/statics/</packagingExcludes> 
    </configuration> 
</plugin> 
+2

Questo non è corretto e mi ha ingannato per un po '. Sto usando la versione 2.1.1, ma packagingExcludes non funziona, mentre warSourceExcludes lo fa. Sembra che nelle versioni più recenti la confezioneExcludes sia il tag corretto da utilizzare. – Noremac

29

warSourceExcludes sembra non essere stato appena rinominato packagingExcludes.

warSourceExcludes: L'elenco separato da virgole di token da escludere quando si copia il contenuto del warSourceDirectory.

packagingExclude: l'elenco separato da virgole di token da escludere dalla WAR prima del confezionamento. Questa opzione può essere utilizzata per implementare il caso d'uso WAR magro.

C'è una grande differenza: Con packagingExcludes, i gettoni sono completamente esclusi dal file guerra finale. Con warSourceExcludes, i token vengono semplicemente ignorati quando si copia la directory war nel file war. Di conseguenza, se i token sono presenti nella webappDirectory per esempio, essi non saranno ignorati quando si utilizza warSourceExcludes ma sarà quando utilizza packagingExcludes.

E un esempio di sintassi di lavoro:

<warSourceExcludes>**/${project.artifactId}/**</warSourceExcludes> 
+0

Cosa intendi con "ignorata durante la copia" ??? Se non vengono copiati nel file war, non sono inclusi nel file war, ed è uguale a packagingExcludes. Puoi spiegarlo più chiaramente? – kolobok

+0

packagingExcludes non copia nella guerra finale mentre warSourceExcludes non copia in warDirectory che verrà compresso in una guerra. – Frohlich

1

Aveva uno scenario in cui ho dovuto escludere le due cartelle che potrebbero essere compensate da *scripts ed erano nella cartella risorse. La prima confusione era se fornire il valore di esclusione come src/main/resources/*scripts o come WEB-INF/classes/*scripts, ovvero la struttura di compilazione pre o post.

Era molto importante fornire /** per escludere l'intera directory dal file di guerra. Nel mio caso, *scripts/**.

Ecco la configurazione finale che ha lavorato:

<packagingExcludes>WEB-INF/classes/*scripts/**</packagingExcludes>