2017-06-13 8 views
1

J'ai un projet avec 2 modules comme ci-dessous:maven reconditionner module pour résoudre les conflits de dépendance

parent 
├── SDK module 
└── service module 
module de service

dépend du module SDK. Le module SDK doit dépendre de httpClient 3.x, mais le module de service doit dépendre de httpClient 4.x.

Je sais que le printemps a un cglib reconditionné. Donc, je veux reconditionner httpClient 3.x au module SDK pour résoudre ce problème.

Quelqu'un sait comment faire cela? (Peut-être-boot de printemps: reconditionner?)

+0

Vous pouvez définir le 4.X httpclient dans le module de service, mais je suppose que va échouer à la fin car le module de service a une dépendance au module SDK non sans raison donc il utilise certaines parties du module SDK ... Donc la question est pourquoi ne pas utiliser httpC Lient 3.x dans le module de service? Ou mettre à jour le module SDK? – khmarbaise

+0

@khmarbaise Il y a quelque temps, j'importe le code SDK de quelqu'un dans mon projet. Le SDK utilise certaines classes uniquement dans httpClient 3.x. Il perd beaucoup de temps à copier le code source à mettre à niveau. Donc, je veux trouver un moyen élégant pour l'avenir. – bluearrow

Répondre

0

Idéalement, dans un service en cours de développement, je voudrais éviter les dépendances contradictoires, autant que possible.

Si ce n'est pas dans les mains d'un individu, vous pouvez utiliser <exclusions> dans votre déclaration de dépendance pom pour éviter les versions en conflit. Juste essayer, un échantillon autour serait comme: -

SDKModule/pom.xml

<dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpclient</artifactId> 
    <version>3.1</version><!--just an example--> 
</dependency> 

ServiceModule/pom.xml

<dependency> 
    <groupId>some-group-id</groupId> 
    <artifactId>sdk-module</artifactId> 
    <version>some.version</version> 
    <exclusions> 
     <exclusion> 
      <groupId>org.apache.httpcomponents</groupId> 
      <artifactId>httpclient</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 
<!--This adds an exclusive version of httpclient not included via sdk-module--> 
<dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpclient</artifactId> 
    <version>4.5.3</version> 
</dependency> 
+0

Le maven auto exclut httpClient 3.x dans le module de service. Mais il y aura une exception d'exécution car du code dans le module SDK ne peut pas trouver la classe ou la méthode uniquement dans httpClient 3.x. – bluearrow