Les artefacts des dépendances peuvent être exclus en déclarant un <exclusions>
élément à l'intérieur d'un <dependency>
Mais dans ce cas, il est nécessaire d'exclure un artefact hérité d'un projet parent. Voici un extrait du POM en discussion:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>jruby</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<artifactId>base</artifactId>
<groupId>es.uniovi.innova</groupId>
<version>1.0.0</version>
</parent>
<dependencies>
<dependency>
<groupId>com.liferay.portal</groupId>
<artifactId>ALL-DEPS</artifactId>
<version>1.0</version>
<scope>provided</scope>
<type>pom</type>
</dependency>
</dependencies>
</project>
base
artefact, dépend javax.mail:mail-1.4.jar
et ALL-DEPS
dépend d'une autre version de la même bibliothèque. En raison du fait que mail.jar
de ALL-DEPS
exist sur l'environnement d'exécution, bien que non exporté, entre en conflit avec le mail.jar
qui existe sur le parent, qui est défini comme compile
.
Une solution pourrait être de débarrasser mail.jar du POM parent, mais la plupart des projets qui héritent de la base en ont besoin (comme c'est une dépendance transtive pour log4j). Donc, ce que je voudrais faire, c'est simplement exclure la bibliothèque parent du projet enfant , comme cela pourrait être fait s'il base
s'agissait d'une dépendance et non du pom parent:
...
<dependency>
<artifactId>base</artifactId>
<groupId>es.uniovi.innova</groupId>
<version>1.0.0</version>
<type>pom<type>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
</exclusions>
</dependency>
...