Warum wählt Maven Version 1.0.b2 über 1.3.03

8

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:

%Vor%

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%     
Wim Deblauwe 24.04.2014, 11:57
quelle

2 Antworten

9

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).

    
Nick Holt 24.04.2014, 12:05
quelle
1

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)

    
eis 24.04.2014 12:05
quelle

Tags und Links