172 votes

Maven: comment remplacer la dépendance ajoutée par une bibliothèque

Voici mon problème générique:

Mon projet P dépend de la qui dépend de B qui dépend de C qui dépend de la version 1.0.1 de D.

Il y a un problème avec la version 1.0.1 de D et je veux forcer l'utilisation d'un autre module. Je ne sais pas comment déclarer dans mon projet de Pdm, puisque je n'ai pas ajouté une dépendance sur D directement. C'est C qui a déclaré que la dépendance sur D.

Important: Dans ce cas, non seulement la version est modifiée, mais le groupe et de l'artefact ainsi. Il n'est donc pas juste une question de substitution de la version de la dépendance, mais plutôt, de l'exclusion d'un module et notamment un autre.

Dans le cas concret, D est StAX dont la version 1.0.1 a un bug. Selon les notes du bug, "les problèmes ont été résolu par le remplacement de la stax-api-1.0.1 (maven GroupId = stax) par stax-api-1.0-2 (maven GroupId = javax.xml.stream)" donc j'essaye juste que.

Ainsi, D = stax:stax-api:jar:1.0.1 et C = org.apache.xmlbeans:xmlbeans jar:2.3.0

Je suis l'aide de maven 2.0.9 en cas de questions.

Sortie de mvn dependency:tree"

mvn dependency:tree
[..snip..]
[INFO] +- org.apache.poi:poi-ooxml:jar:3.6:compile
[INFO] |  +- org.apache.poi:poi-ooxml-schemas:jar:3.6:compile
[INFO] |  |  +- org.apache.xmlbeans:xmlbeans:jar:2.3.0:compile
[INFO] |  |  |  \- stax:stax-api:jar:1.0.1:compile

Dans mon POM du projet, j'ai la dépendance suivant sur la "Une":

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.6</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.6</version>
</dependency>

Merci à l'avance.

146voto

Colin Hebert Points 40084

Il suffit de spécifier la version actuelle de votre pom. La version spécifiée ici écraseront les autres.

Forcer une version
Une version sera toujours honorée si elle est déclarée dans le courant de POM avec une version particulière - toutefois, il convient de noter que cela affectera également les autres poms en aval si elle est elle-même dépendait de l'aide et dépendances transitives.


Ressources :

36voto

scot Points 311

Alternativement, vous pouvez simplement exclure la dépendance que vous ne souhaitez pas. STAX est inclus dans le JDK 1.6, donc si vous êtes à l'aide de 1,6 vous pouvez juste exclure entièrement.

Mon exemple ci-dessous est légèrement mal pour vous - vous avez seulement besoin de l'un des deux exclusions, mais je ne suis pas tout à fait sûr que l'on. Il existe d'autres versions de Stax flottant sur, dans mon exemple ci-dessous j'ai été à l'importation d'Un importées B qui a importé C & D, qui chacun (à travers encore plus dépendances transitives) importés de différentes versions de Stax. Donc, dans ma dépendance "A", j'exclus les deux versions de Stax.

<dependency>
  <groupId>a.group</groupId>
  <artifactId>a.artifact</artifactId>
  <version>a.version</version>
  <exclusions>
    <!--  STAX comes with Java 1.6 -->
    <exclusion>
      <artifactId>stax-api</artifactId>
      <groupId>javax.xml.stream</groupId>
    </exclusion>
    <exclusion>
      <artifactId>stax-api</artifactId>
      <groupId>stax</groupId>
    </exclusion>
  </exclusions>
<dependency>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X