2012-12-06 4 views
0

Il existe deux projets:
A ---- a lib libons vers. 1.3.7 --- (dépend de B)
B ---- a lib commons vers. Donc, nous construisons le projet B, lib commons vers. 1.2.5 sera inclus et installé dans le dépôt local, puis ... si nous exécutons la construction de A (qui dépend de B), Maven décide que lib commons vers. 1.3.7 doit être inclus, parce que lib est à la plus petite distance de la racine de l'arbre ... Je sais que si nous définissons la version de l'artefact comme: 1.2.5 - c'est la version recommandée. Mais si nous le mettons dans [] - c'est une exigence difficile et Maven devrait appliquer une autre stratégie pour résoudre le conflit de version - pour inclure la version recommandée de cet artefact. Mais quand j'essaye de le faire, ça ne marche pas, parce que Maven prend l'artefact du dépôt loc, qui contient la référence sur lib commons vers. 1.2.5 dans le fichier manifeste, mais lib qui est inclus - commons vers. 1.3.7. Pourriez-vous nous dire comment résoudre ce problème, ou à la liste peut-être il ya des outils ou des plugins Maven qui peuvent parler de tels conflits.Dépendances version conflit maven

Répondre

1

Vous devez utiliser des exclusions sur la dépendance. Quelque chose comme ça (juste un échantillon):

<dependency> 
<groupId>org.springframework.integration</groupId> 
<artifactId>spring-integration-amqp</artifactId> 
<version>2.1.0.RELEASE</version> 
<exclusions> 
    <exclusion> 
     <artifactId>spring-beans</artifactId> 
     <groupId>org.springframework</groupId> 
    </exclusion> 
</exclusions> 
</dependency> 

Si vous utilisez Eclipse et ne veulent pas le faire à la main, vous pouvez le faire en ouvrant un fichier pom et en sélectionnant l'onglet d'une « hiérarchie des dépendances » sous lequel vous pouvez voir toutes vos hiérarchies de dépendance. Ensuite, vous pouvez faire un clic droit sur la dépendance que vous souhaitez exclure, puis cliquez sur 'Exclure Maven Artifact'

+0

@jonasas, vous voulez dire que pendant la construction du projet, un projet B sera inclus sans bibliothèque commune? Mais ce n'est pas une solution. En fait, le projet A ne sait rien du projet B, maven fournit juste B.jar avec des commons vers. 1.2.5 dans le fichier MANIFEST, mais en raison de la stratégie "wins le plus proche" Maven décide que lib commons vers. 1.3.7 devrait être inclus. c'est le problème – gizzy

+0

Si vous ne voulez pas utiliser la version 1.3.7 et que vous voulez utiliser la version du projet dépendant (1.2.5) de la bibliothèque, ne pouvez-vous pas supprimer la dépendance directe du projet A? – jonasnas

0

Vous devez exécuter mvn dependency:tree