2010-08-24 3 views
7

J'essaie de contrôler quels fichiers entrent dans le paquet WAR créé par l'objectif mvn package. Plus précisément, je veux exclure certains fichiers du dossier par défaut src/main/resources pour chaque paquet (j'essaie de faire des builds/package pour différents environnements).Sélection de certains fichiers de ressources dans WAR à partir de l'emplacement src/main/resources par défaut avec Maven

J'ai essayé d'utiliser maven-war-plugin mais j'ai échoué. Si j'ajoute cette configuration (pour les tests):

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

... mes WEB-INF/classes contient toujours les fichiers XML. C'est parce que le paramètre webResources semble dupliquer le processus de copie (la configuration ci-dessus fonctionne réellement, les fichiers ne sont pas copiés ... mais ils sont copiés dans certains processus autre à la place).

Maven-war-plugin documentation états:

Le répertoire des ressources par défaut pour tous les projets Maven 2 est src/main/ressources qui prendra fin dans target/classes et dans WEB-INF/classes dans la guerre. La structure du répertoire sera préservée dans le processus. Le plugin WAR est également capable d'inclure des ressources introuvables dans le répertoire de ressources par défaut via le paramètre webResources.

Ceci est un peu déroutant. Est-ce que cela signifie que:

  • Le paramètre webResources est une fonctionnalité dans maven-guerre plugin qui permet aux fichiers à inclure uniquement à l'extérieur dossier src/main/resources? Si oui, comment pouvons-nous modifier les fichiers copiés à l'intérieur de src/main/resources?
  • Le paramètre webResources est une fonctionnalité de maven-war-plugin qui permet d'inclure les fichiers aussi depuis l'extérieur du dossier src/main/resources? Si oui, comment peut-il être configuré pour faire cela?
  • Une autre option?
+0

Etes-vous en train d'essayer de construire pour différents environnements avec le même paquet mvn ou contrôlez-vous cela en utilisant des profils? – khmarbaise

+0

Oui, j'utilise des profils. –

Répondre

11

Je suis en train de contrôler les fichiers faire dans le package WAR créé par objectif mvn package. Plus précisément, je veux exclure certains fichiers du défaut src/dossier principal/ressources pour chaque paquet

Ressources du répertoire des ressources par défaut (src/main/resources) sont copiés dans le répertoire de sortie de construction (target/classes) pendant la phase process-resources. Ensuite, pendant la phase package, le contenu de target/classes est pris et empaqueté dans une archive distribuée, comme un fichier WAR, et finit dans WEB-INF/classes dans ce cas.

Donc, si vous voulez contrôler les ressources finissent dans WEB-INF/classes, vous devez contrôler les ressources finiront dans target/classes i.e. de modifier en quelque sorte le comportement de the goal bound to the process-resources phase, en particulier l'objectif resources:resources du Maven Resources Plugin.

Et pour le faire, (ce qui est probablement pas intuitive), vous pouvez déclarer exclude ou include éléments à l'intérieur élément resources de la pom, comme le montre Including and excluding files and directories. Appliqué au répertoire des ressources par défaut:

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

Et si vous voulez faire des règles d'exclusion utilisation personnalisés pour les environnements différents, combiner avec profiles. Par exemple:

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

Et lorsque vous utilisez ce profil, les fichiers XML ne finissent dans target/classes et, par conséquent, ils ne se retrouveront pas dans WEB-INF/classes dans la dernière guerre.

J'ai essayé d'utiliser maven-war-plugin mais j'ai échoué. Si j'ajoute cette configuration (pour les tests) (...) mes WEB-INF/classes contient toujours les fichiers XML

Ce que vous faites ici est l'ajout d'un répertoire des ressources supplémentaires, ce qui semble être le répertoire de ressources par défaut déjà inclus. Donc, peu importe ce que vous allez exclure, cela n'a aucun effet puisque les fichiers sont copiés à target/classes pendant process-resources de toute façon et donc se retrouvent toujours dans WEB-INF/classes.

En d'autres termes, utilisez webResources lorsque vous souhaitez ajouter des ressources supplémentaires qui ne font pas partie du répertoire des ressources par défaut:

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

Mais je ne pense pas que ce soit ce que vous cherchez ici et suggérer d'utiliser l'approche suggérée ci-dessus.

+0

J'ai essayé d'exclure des fichiers dans l'élément "global" 'resources'. Le résultat est que les fichiers exclus ne sont pas entrés dans 'target/classes', cependant, ils sont encore dans' target/mypackage-1.0.0-SNAPSHOT'. Mais je vais vérifier à nouveau juste pour s'assurer, peut-être que j'ai fait une faute de frappe/erreur là:/ –

+0

@Tuukka Hmm ... Oui, s'il vous plaît, vérifiez (avec une construction propre). –

+0

@ Pascal: après l'avoir essayé de nouveau, il semble fonctionner. Peut-être que j'ai fait une erreur plus tôt, étant un peu confus à propos de l'ensemble du processus:/Donc, votre suggestion est certainement la bonne. J'ai toujours un problème d'obtention d'un échec de compilation en raison d'un début d'expression illégal car Maven ne reconnaît pas les annotations que j'utilise dans les tests. Cependant, cela semble être un problème commun à Maven et non lié à l'exclusion des fichiers. Je vais essayer de résoudre ce prochain :) Merci pour votre soutien! –

0

Voir Pascal's answer for right configuration and good explanation of the process. Je viens de donner une réponse directe à cette question ici:

  • Le paramètre webResources est une fonctionnalité maven-guerre plugin qui permet aux fichiers à inclure seulement de l'extérieur src/dossier principal/ressources? Si oui, comment pouvons-nous modifier les fichiers copiés à l'intérieur de src/main/ressources?
  • Le paramètre webResources est une fonctionnalité de maven-war-plugin qui permet d'inclure les fichiers aussi depuis le dossier src/main/resources externe? Si oui, comment peut-il être configuré pour faire cela?

Il est le premier, le paramètre webResources dans maven-war-plugin ne permet d'inclure un supplémentaires des ressources extérieures src/main/resources. Il ne permet pas de configurer inclut/exclut pour src/main/resources lui-même.

Questions connexes