2013-11-03 9 views
6

Wenn ich ein Maven-Projekt, das auf explizite Abhängigkeiten hat eine und B Version 2.0 und A hat transitive Abhängigkeit von B Version 1.0. Überwiegt eine neuere Version von B ältere Versionen? Ich habe Maven Abhängigkeit verwendet: Ziel zu lösen, und es sieht aus wie eine ältere Version von B ist nicht gelöst. Was ist, wenn A nicht mit der neueren Version B kompatibel ist? Oder wenn A hängt von B Version 2.0 und mein Projekt hat explizite Abhängigkeit von B Version 1.0 nach dem Ausführen Abhängigkeit: beheben Ziel, das ich sehe nicht, neuere Version von B dann. Wie werden diese Abhängigkeiten dann gelöst?Überschreiben neuere Versionen von Abhängigkeiten ältere Versionen in Maven-Projekten?

Und wenn ich Auflösung Ziel verwenden, zeigt es Abhängigkeiten. Aber in welcher Phase werden diese Abhängigkeiten verwendet? Übersetzen, testen, Laufzeit?

Antwort

9

Die Version, die näher an der Wurzel Ihrer Abhängigkeitsstruktur ist, wird bevorzugt. Wenn beide widersprüchlichen Versionen die gleiche Tiefe in der Struktur haben, gewinnt die erste (beginnend von der Spitze der Struktur).

Ist das eine völlig dumme Regel? Ja, so ist es. Der einzige Vorteil ist, dass Sie immer eine bestimmte Version einer Abhängigkeit erzwingen können, indem Sie sie als direkte Abhängigkeit von Ihrem Projekt deklarieren.

In Ihrem Fall wird also B: 2.0 verwendet, da es als direkte Abhängigkeit deklariert ist. Wenn A mit B: 2.0 nicht funktioniert, dann verwenden Sie entweder B: 1.0 in Ihrem Code oder wählen Sie eine andere Bibliothek, die dasselbe wie A tut, aber keinen Konflikt verursacht.

1

I maven wählen nicht die neuere Version eines Artefakts, wenn mehrere Versionen in der Abhängigkeitsbaumstruktur referenziert werden. Betrachtet man http://maven.apache.org/plugins/maven-dependency-plugin/examples/resolving-conflicts-using-the-dependency-tree.html, scheint es die nächste Definition aus der Wurzel des Baumes zu wählen. Das bedeutet, dass die Version im Haupt-POM der in transitiven Abhängigkeiten bevorzugt wird. Wenn Ihr Projekt also von B v1.0 abhängt und A eine transitive Abhängigkeit von B v2.0 hat, dann hat Ihr Projekt B v1.0 gewählt.

Verwandte Themen