Ich habe ein Projekt mit einer Abhängigkeit von HTTP-Builder, dies gibt mir die folgende Abhängigkeitsstruktur:
%Vor% Nachdem ich den hibernate-entitymanager hinzugefügt habe, ändert sich die Version von xml-apis:aml-apis
. Plötzlich bevorzugt Maven die Version 1.0b2, die eine transitive Abhängigkeit über dom4j ist:
Aus diesem Grund bekomme ich jetzt zur Laufzeit folgende Ausnahme:
%Vor%Ich weiß, dass ich es beheben kann, indem ich manuell die Abhängigkeit mit der guten Versionsnummer in meiner pom.xml hinzufüge, aber ich frage mich, warum das nötig ist:
%Vor%Wenn die Abhängigkeit in der Abhängigkeitsbaumstruktur gefunden wird, verwendet Maven standardmäßig eine der Wurzel am nächsten liegende Wurzel.
In Ihrem Fall bedeutet das
%Vor%Vs
%Vor% Oder anders ausgedrückt 3 Ebenen tief vs 4 Ebenen tief , so dass 1.0.b2
gewinnt.
Um dies zu lösen, schließen Sie entweder xml-apis
von Ihrer Abhängigkeit von hibernate-entitymanager
aus oder erklären Sie explizit eine Abhängigkeit von xml-apis
(obwohl Sie vielleicht ein bisschen damit spielen müssen, kann Xerces und seine Abhängigkeiten ein Albtraum sein versionsgerecht ausgerichtet).
Es wird benötigt, weil Maven nicht wissen kann, welche Version es wählen soll. Daher wählt Maven die nearest-wins-Strategie, um auszuwählen, welche Version verwendet werden soll. Nearest-wins-Strategie ist dokumentiert in der Maven-Dokumentation .
Im Abhängigkeits-T-Stück, das Sie zur Verfügung gestellt haben, ist Version 1.0.b2 eindeutig am nächsten, so dass das Verhalten wie geplant funktioniert.
Vielleicht möchten Sie hier anschauen thread , wo dies zuvor besprochen wurde (ich konnte nicht entscheiden, ob dieser Thread ein Duplikat davon ist oder nicht)