Comment exclure des pots généré par maven guerre plugin?
En raison de dépendances transitives, mon guerres se sont peuplées par xml api, xerces pots.
J'ai essayé de suivre les instructions sur la page de référence pour maven-guerre-plugin, mais il ne fonctionne pas.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<packagingExcludes>WEB-INF/lib/xalan-2.6.0.jar,WEB-INF/lib/xercesImpl-2.6.2.jar,WEB-INF/lib/xml-apis-1.0.b2.jar,WEB-INF/lib/xmlParserAPIs-2.6.2.jar</packagingExcludes>
<webXml>${basedir}/src/main/webapp/WEB-INF/web.xml</webXml>
<warName>project1</warName>
<warSourceDirectory>src/main/webapp</warSourceDirectory>
</configuration>
</plugin>
Ce que je fais mal ?
Si c'est important, j'ai découvert que le maven-guerre-plugin que j'utilise est à la version 2.1-alpha-1
Vous devez vous connecter pour publier un commentaire.
Vous pouvez marquer ces dépendances comme prévu:
De cette façon, le maven va ajouter à la compilation classpath, mais pas de les emballer. Il est à supposer qu'ils existent dans votre conteneur de servlet.
Voir plus sur maven étendues ici en vertu de la "portée"
Modifier
Si vous souhaitez supprimer des classes ajoutées via des dépendances transitives vous pouvez les exclure de la dépendance comme ceci:
(prises de cette réponse)
Voir plus ici
mvn clean package
par la suiteJe l'ai corrigé.
À une relecture de l'référence avec un peu plus de soin, j'ai découvert que l'élément packagingExcludes devrait être warSourceExcludes.
<packagingExcludes>WEB-INF/lib/xercesImpl-2.9.1.jar,WEB-INF/lib/xml-apis-1.3.04.jar</packagingExcludes>
, l'exclusion normale ne semble pas fonctionner. Je n'ai pas essayé substituant ces deps comme "prévu".À propos de l'exclusion des dépendances transitives, je pense ne pas travailler avec transtive de transitives avec des dépendances, et je pense que cela pourrait être le cas.
Par exemple, ajouter la dépendance de mise en veille prolongée-core -> dom4j -> xml api si ajouter exclure de xml api près de votre hibernate-core, toujours ajouter xml, api...
Je n'avais aucune possibilité de les modifier en fonction de la guerre de fichier. J'avais besoin d'éviter certains vieux fichier jar à partir de lib. Cet extrait de POM.xml configuration fonctionne bien pour moi. J'utilise Maven 2.2.
Pour ajouter quelques précisions, vous ne pouvez absolument exclure les dépendances transitives. Par exemple, si vous avez une dépendance sur Un, qui a une dépendance sur M, qui à son tour a une dépendance sur X, alors vous pouvez exclure X, où vous indiquez votre dépendance.
Par exemple, dire que vous dépendez de l' 'myPackageA", qui dépend de Rempart, qui dépend de Xerces, alors vous pouvez exclure Xerces dans votre myPackageA dépendance:
Pour vérifier vos dépendances par la suite, exécuter mvn dependency:tree' et j'espère que vous ne verrez pas de xerces dépendances.
La bonne solution est d'utiliser le
<packagingExcludes>
de configuration, comme le<scope>provided</scope>
solution est un hack.De considérer les éléments suivants multi-projet de module:
Dans ce multi-projet de module, module
A
nécessite des modules {B
,C
,D
}, mais pas {e
,f
,g
}. Toutefois, les modulesB
etD
ne exiger {e
,f
g
}, etC
nécessite {g
}.Tout d'abord, nous allons essayer de résoudre ce problème avec la
<scope>provided</scope>
approche:À exclure {
e
,f
,g
} deA
, le<scope>provided</scope>
spec doit être présent dansD
's POM. Mais attendez,B
nécessite {e
,f
,g
}. Donc, pour remédier à cela, la dépendance déclarations pour {e
,f
,g
} doit être présent dansB
's POM ainsi (avec<scope>provided</scope>
). Cela signifie que la dépendance spec complexité deD
doit être tiré dansB
. De même, depuisC
dépend {g
}, la dépendance déclarations pour {g
} doit être présent dansC
's POM.Avec le
<scope>provided</scope>
solution, modulesB
,C
, etD
doivent avoir connaissance du fait queA
ne peut pas avoir {e
,f
,g
}.Cette approche rompt le principe d'encapsulation, et n'est pas pratique dans plusieurs modules, les projets qui ont le complexe des graphes de dépendance.
Deuxième, nous allons essayer de résoudre ce problème avec la
<packagingExcludes>
approche:À exclure {
e
,f
,g
} deA
, on doit fournir les renseignements suivants dansA
's POM:Avec cette solution, la complexité de "ce qui doit être exclu de
A
" est contenue uniquement dansA
's POM. Cela libère de l'modulesB
,C
etD
de prendre soin au sujet de l'exclusion des dépendances transitives pour l'amour deA
.Cette solution respecte le principe d'encapsulation.
Voir ma réponse ici. Le
packaging-excludes
entrée ne fonctionne qu'avec maven-guerre-version du plugin 2.1-alpha-1 et ci-dessus. Donc, vous devrez peut-être mettre à jour la version utilisée ou, vous pouvez préférer utiliser la dépendance au niveau de l'injection car il est plus précis de l'exclusion de certains pots.Lors de la compilation avec maven 3 (j'ai utilisé 3.0.2) avec fourni portée vous avez le problème avec les dépendances transitives (vous avez un los de Pots à l'intérieur de la GUERRE).
Si vous utilisez d'anciennes versions de maven (j'ai utilisé 2.2.1), la GUERRE contient ce qui est spected (seulement dépendances n'est pas fourni
Vous pouvez le faire en spécifiant à l'intérieur de
<packagingExcludes></packagingExcludes>
à l'intérieur de</configuration><configuration>
.Vous pouvez spécifier par cartes sauvages et expressions régulières trop. Reportez-vous à la la documentation pour plus d'info.