2010-08-24 13 views
7

Sto provando a controllare quali file vengono creati nel pacchetto WAR creato dall'obiettivo mvn package. Nello specifico, voglio escludere alcuni file dalla cartella predefinita src/main/resources per ogni pacchetto (sto provando a fare build/pacchetto per ambienti diversi).Selezione di determinati file di risorse in WAR dalla posizione predefinita src/main/resources con Maven

Ho provato a utilizzare maven-war-plugin ma non è riuscito. Se aggiungo questa configurazione (per le prove):

<webResources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <targetPath>WEB-INF/classes</targetPath> 
     <excludes> 
      <exclude>*.xml</exclude> 
     </excludes> 
    </resource> 
</webResources> 

... miei conterrà ancora i file XML WEB-INF/classes. Questo perché il parametro webResources sembra duplicare il processo di copia (la configurazione di cui sopra funziona effettivamente, i file non vengono copiati ... ma vengono copiati in qualche altro processo invece) .

Maven-war-plugin documentation stati:

La directory delle risorse di default per tutti i 2 progetti Maven è src/main/risorse che finirà in target/classi e in WEB-INF/classes in guerra. La struttura della directory verrà mantenuta nel processo.

Il plugin WAR è anche in grado di includere risorse non trovate nella directory delle risorse predefinite tramite il parametro webResources.

Questo è un po 'di confusione. Vuol dire che:

  • Il parametro webResources è una funzionalità di Maven-guerra-plugin che permette di file da includere solo dall'esterno cartella src/main/resources? In tal caso, come possiamo modificare i file copiati dall'interno di src/main/resources?
  • Il parametro webResources è una funzionalità del plugin maven-war che consente di includere i file anche dalla cartella esterna src/main/resources? In tal caso, come può essere configurato per farlo?
  • Un'altra opzione?
+0

Stai cercando di creare ambienti diversi con lo stesso pacchetto mvn o lo controlli utilizzando i profili? – khmarbaise

+0

Sì, sto usando i profili. –

risposta

11

Sto cercando di controllare quali file rendere nel pacchetto WAR che viene creato da obiettivo pacchetto mvn. In particolare, voglio escludere alcuni file dalla cartella predefinita src/main/risorse per ogni pacchetto

risorse dalla directory di risorse di default (src/main/resources) vengono copiati nella directory di output build (target/classes) durante la fase process-resources. Quindi, durante la fase package, il contenuto di target/classes viene prelevato e inserito in un archivio distribuito, ad esempio un WAR, e termina in questo caso in WEB-INF/classes.

Quindi, se si desidera controllare quali risorse finiscono in WEB-INF/classes, è necessario controllare quali risorse finiranno in target/classes cioè di modificare in qualche modo il comportamento di the goal bound to the process-resources phase, in particolare il resources:resources obiettivo del Maven Resources Plugin.

E per farlo, (questo non è probabilmente intuitivo), è possibile dichiarare exclude o include elementi all'interno resources elemento del pom, come mostrato in Including and excluding files and directories. Applicato alla directory delle risorse di default:

<build> 
    <resources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <excludes> 
     <exclude>**/*.xml</exclude> 
     </excludes> 
    </resource> 
    </resources> 
</build> 

E se si vuole fare le regole di esclusione utilizzo personalizzate per diversi ambienti, combinare questo con profiles. Per esempio:

<project> 
    ... 
    <profiles> 
    <profile> 
     <id>env-uat</id> 
     <activation> 
     <property> 
      <name>env</name> 
      <value>uat</value> 
     </property> 
     </activation> 
     <build> 
     <resources> 
      <resource> 
      <directory>src/main/resources</directory> 
      <excludes> 
       <exclude>**/*.xml</exclude> 
      </excludes> 
      </resource> 
     </resources> 
     </build> 
    </profile> 
    </profiles> 
</project> 

E quando si utilizza questo profilo, i file XML non finiranno in target/classes e di conseguenza non finiranno nel WEB-INF/classes nella guerra finale.

Ho provato a utilizzare maven-war-plugin ma non è riuscito. Se aggiungo questa configurazione (per la prova) (...) i miei WEB-INF/classes saranno ancora contenere i file XML

Quello che stai facendo qui è l'aggiunta di una directory ulteriori risorse, che sembra essere la directory delle risorse predefinite già inclusa. Quindi, qualunque cosa escluderai, questo non ha alcun effetto dal momento che i file vengono copiati su durante il process-resources in ogni caso e quindi continuano a essere terminati in WEB-INF/classes.

In altre parole, utilizzare webResources quando si desidera aggiungere risorse aggiuntive che non fanno parte della directory di risorse predefinito:

<project> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.1</version> 
     <configuration> 
      <webResources> 
      <resource> 
       <!-- this is relative to the pom.xml directory --> 
       <directory>extra-resources</directory> 
      </resource> 
      </webResources> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    ... 
</project> 

Ma non credo che questo è quello che stai cercando qui e suggerire di utilizzare l'approccio suggerito sopra.

+0

Ho effettivamente provato ad escludere i file nell'elemento "globale" 'resources'. Il risultato è stato che i file esclusi non sono entrati in 'target/classes', tuttavia, hanno ancora ottenuto in' target/mypackage-1.0.0-SNAPSHOT'. Ma lo controllerò di nuovo solo per essere sicuro, forse ho fatto qualche errore/errore lì:/ –

+0

@Tuukka Hmm ... Sì, per favore, ricontrolla (con una build pulita). –

+0

@ Pascal: dopo averlo provato in questo modo, sembra che funzioni. Forse ho fatto un errore prima, essendo un po 'confuso riguardo l'intero processo:/Quindi il tuo suggerimento è sicuramente quello giusto. Ho ancora il problema di ottenere 'Compilation failure' a causa di' illegal start of expression 'perché Maven non "riconosce" le annotazioni che uso nei test. Tuttavia, questo sembra un problema comune di Maven e non è correlato all'esclusione di file con qualsiasi mezzo. Proverò a risolvere il problema :) Grazie per il tuo supporto! –

0

Vedere Pascal's answer for right configuration and good explanation of the process. Devo semplicemente dare una risposta diretta a questa domanda qui:

  • Il parametro webResources è una funzionalità di Maven-guerra-plugin che permette ai file di essere inclusi solo da cartella esterna src/main/risorse? In tal caso, come possiamo modificare i file copiati da src/main/resources?
  • Il parametro webResources è una funzionalità del plugin maven-war che consente di includere i file anche da dalla cartella esterna src/main/resources? In tal caso, come può essere configurato per farlo?

E 'il primo, il parametro webResources in maven-war-plugin consente una sola per includere aggiuntivi risorse dall'esterno src/main/resources. È non consentire di configurare include/esclude per src/main/resources stesso.

Problemi correlati