2017-12-07 2 views
0

ich eine Bibliothek geschrieben habe ich geschrieben habe, das habe ich dann eine Anwendung geschriebenMaven eine alte Version einer transitiven Abhängigkeit ziehen

auf Guava Version 20.0 (mit JDK 1.7 kompatibel ist die letzte Version, die) abhängt das verwendet diese Bibliothek und auch uk.org.lidalia: slf4j-test: 1.2.0 (mit Testumfang). slf4j-test hat eine Abhängigkeit von Guava Version 14.0.1.

Mein Problem ist, dass meine Anwendung zwei verschiedene Versionen von Guava als transitive Abhängigkeiten sieht und die ältere Version auswählt. Wenn ich nun bestimmte Methoden in meiner Bibliothek anrufe, bekomme ich Klassen- oder Methoden-Ausnahmen.

Ich kann (und habe) Guava als eine Abhängigkeit von slf4j-test ausgeschlossen, die das Problem für jetzt behebt, aber das Problem wird zurückkehren, wenn ich eine andere Abhängigkeit einführe, die Guava verwendet.

Also meine Frage ist: Warum sollte Maven die ältere Version einer Abhängigkeit auswählen und wie ich immer die neuesten Versionen auswählen.

+1

https://cwiki.apache.org/confluence/display/MAVENOLD/Dependency+Mediation+and+Conflict+Resolution#DependencyMediationandConflictResolution-DependencyVersionRanges –

+0

Sie einfach Guva als direkte Abhängigkeit von der Anwendung definieren sollten .. – khmarbaise

Antwort

3

Sie können Maven nicht zwingen, immer die neueste Version auszuwählen. Aber es gibt mehrere Dinge, die Sie tun können:

  1. Wenn Sie die Abhängigkeit in Ihrem eigenen Pom erklären, gewinnt diese Version immer. Wenn Sie eine Abhängigkeit von Guava 20.0 in Ihrem Pom haben, werden Sie genau das bekommen.

  2. Wenn dies nicht geeignet ist, können Sie einen Eintrag in dependencyManagement eingeben, der die Version für Guava setzt. Dies überschreibt alle transitiv gesetzten Versionen (wie die 14.0.1 in Ihrem Beispiel).

  3. Das Maven Enforcer-Plugin hat eine Regel, die sicherstellt, dass alle Abhängigkeiten auf die neueste Version ausgewertet werden - aber es wählt nicht die neueste Version aus, es schlägt nur fehl, wenn es nicht ausgewählt wurde. Dann müssen Sie es selbst auswählen, indem Sie die obige Methode (1) oder (2) anwenden.

+1

oder die Guava-Abhängigkeit von uk.org.lidalia ausschließen: slf4j-test: 1.2.0 –

+0

@Pedro H, Danke, aber ich will das nicht für jede Bibliothek tun, die zufällig eine Abhängigkeit von Guava hat. Ich will nicht einmal die Mühe, nach ihnen allen zu suchen – Stormcloud

Verwandte Themen