2012-11-05 2 views
6

J'ai une application web Java, dans laquelle j'ai quelques dossiers dans le répertoire source de la webapp standard (src/main/webapp) que je ne veux pas copier dans le guerre (exploded ou packaged). L'une des raisons pour lesquelles je ne veux pas que ces fichiers soient copiés est que nous exécutons le compresseur YUI JS & CSS minimizer & sur les fichiers .js et .css dans la guerre éclatée. Les fichiers que je veux exclure produisent des erreurs pendant la phase de compression. L'autre raison pour laquelle je ne veux pas qu'ils ajoutent à la guerre est qu'ils supportent le test d'une seule application JS qui vit dans la webapp (ce sont des scripts de test JS côté client qui s'appuient sur node/angular.js).Comment exclure des fichiers d'être copiés, par maven, dans la guerre éclatée

Voici les sections pertinentes du 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> 

J'ai essayé, sans succès, d'utiliser warSourceExcludes d'exclure certains chemins, mais en vain. Un exemple de mon utilisation est illustré ci-dessous, où client/ est un dossier directement sous src/main/webapp:

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

Quelle est la bonne façon d'exclure certains chemins et ou des fichiers individuels, dans le répertoire source d'application Web d'être inclus dans la guerre éclatée?

MISE À JOUR

Faisant suite à la suggestion de @maba je mis à jour la configuration comme suit:

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

Le dossier, client/, est encore en train de copier à travers. Des idées?

+1

warSourceExcludes est documenté comme étant une chaîne séparée par des virgules, donc il ne devrait pas y avoir de XML là-dedans . http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html –

+0

question a été mise à jour pour refléter l'utilisation correcte - ne fonctionne toujours pas pour moi cependant. – Kris

+0

Je pense qu'il y a un autre problème avec mon 'pom.xml'. Je vais regarder si cette semaine avec un projet vierge généré à partir d'un archétype – Kris

Répondre

6

Merci à @alexksandr & @maba pour leurs réponses - qui, bien que correct, n'a pas complètement résolu mon problème.

La solution semble être - bien que je ne sache pas exactement pourquoi c'est le cas - que la section de configuration ne soit pas reprise quand elle est placée dans la section execution.

Prenant mon pom d'origine.xml et refactoring pour le rendre le travail donne:

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

Le détail important semble être que la configuration doit être au niveau supérieur du plug-in et non dans la section execution - si clairement le xml dans mon la première tentative d'utiliser warSourceExcludes était loin de la cible (voir la question originale avant la section mise à jour).

+0

Voilà comment fonctionnent les plugins maven. Ils ont une configuration qui doit être exécutée dans une configuration de construction ** OU ** pour l'exécution de la ligne de commande. Jetez un coup d'œil à ['maven-dependency-plugin'] (https://maven.apache.org/plugins/maven-dependency-plugin/usage.html) à titre d'exemple. Il est assez spécifique sur la façon dont les deux parties de la configuration diffèrent. Vos exigences n'étaient pas totalement claires. Mais c'est bien que vous ayez maintenant une configuration fonctionnelle. – maba

+0

merci pour la clarification - et apollogies si je n'ai pas décrit le problème correctement (probablement parce que je ne comprends pas vraiment les détails plus fins de maven). Mais merci encore maba @aleksandr pour votre aide! – Kris

+0

Si vous avez trouvé nos réponses utiles/utiles, alors votez-les. Et acceptez votre propre réponse si c'est ce que vous avez trouvé être la meilleure solution. – maba

1

Votre warSourceExcludes est erronée. Voici ce que dit le maven-war-plugin en ce qui concerne warSourceExludes:

La liste séparée par des virgules des jetons pour exclure lors de la copie du contenu du warSourceDirectory.

Donc dans votre cas c'est ce que votre configuration devrait ressembler à:

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

Cela signifie également que si vous voulez ajouter un peu plus ne comprend pas, simplement les ajouter séparés par une virgule:

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

Salut, Tout d'abord merci pour la réponse. juste essayé votre suggestion sans succès, mettra à jour ma question pour inclure ce que j'ai essayé. merci – Kris

+0

J'ai essayé avec votre installation et j'ai un dossier dans 'target' qui se termine par' -work' et dans ce dossier il n'y a aucun signe du répertoire 'client'. – maba

+0

Voulez-vous créer une guerre avec la même mise en page? Ou est-ce que la guerre éclatée est le seul résultat que vous voulez? – maba

1

afin d'exclure tous les fichiers de caractères génériques d'utilisation du dossier comme celui client/**

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

Je ne pouvais trouver aucune configuration de < warSourceExcludes> qui a travaillé, mais < packagingExcludes> a fait le travail:

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

Cela a résolu mon problème avec minify-maven-plugin, qui gardait les fichiers concaténés dans mon .war, même avec l'utilisation de . – Cesar

+0

notez que 'packagingExcludes' exclut seulement du fichier' .war', pas du dossier éclaté – jediz

Questions connexes