Maven: Wie man die von einer Bibliothek hinzugefügte Abhängigkeit überschreibt
Hier ist mein Allgemeines problem:
Mein Projekt P abhängig ist, die abhängig von B hängt von C, die abhängig von version 1.0.1 D.
Es gibt ein problem mit version 1.0.1 D, und ich will so erzwingen Sie die Verwendung von einem anderen Modul. Ich weiß nicht, wie zu erklären, dass diese in meinem Projekt POMs, da ich noch nicht Hinzugefügt, die eine Abhängigkeit von D direkt. Es ist C, das erklärt die Abhängigkeit D.
Wichtig: In diesem Fall, nicht nur die version geändert wird, aber die Gruppe & Artefakt als gut. Es ist also nicht nur eine Frage der Außerkraftsetzung der version der Abhängigkeit, sondern vielmehr, ohne ein Modul und darunter noch eine.
Im konkreten Fall, D ist StAX, deren 1.0.1 hat eine bug. Anhand der Notizen in den Fehler, "die Probleme wurden gelöst durch ersetzen der stax-api-1.0.1 (maven GroupId = stax) von stax-api-1.0-2 (maven GroupId = javax.xml.stream)" so dass ich versuche nur, die.
So, D = stax:stax-api:jar:Version 1.0.1 und C = org.apache.xmlbeans:xmlbeans:jar:2.3.0
Bin ich mit maven 2.0.9, falls es Fragen.
Ausgabe von mvn dependency:tree"
mvn dependency:tree
[..snip..]
[INFO] +- org.apache.poi:poi-ooxml:jar:3.6:compile
[INFO] | +- org.apache.poi:poi-ooxml-schemas:jar:3.6:compile
[INFO] | | +- org.apache.xmlbeans:xmlbeans:jar:2.3.0:compile
[INFO] | | | \- stax:stax-api:jar:1.0.1:compile
In meinem Projekt POM habe ich folgende Abhängigkeiten auf "Ein":
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.6</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.6</version>
</dependency>
Vielen Dank im Voraus.
InformationsquelleAutor der Frage wishihadabettername | 2010-10-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Geben Sie einfach die version, die in Ihrer aktuellen pom. Die version, die hier angegeben werden, überschreiben andere.
Ressourcen :
InformationsquelleAutor der Antwort Colin Hebert
Alternativ können Sie nur ausschließen, die Abhängigkeit, die Sie nicht wollen. STAX ist enthalten im JDK 1.6, also, wenn Sie mit 1.6 können Sie nur ausschließen, es völlig.
Meinem Beispiel unten ist etwas für Sie falsch - Sie müssen nur eine der beiden AUSSCHLÜSSE, aber ich bin mir nicht ganz sicher welchen. Es gibt andere Versionen von Stax schweben über, in meinem Beispiel unten wurde ich importieren, die importierten B, die importiert C & D, die jeweils (durch noch mehr transitive Abhängigkeiten) importiert verschiedene Versionen von Stax. Also in meinem Abhängigkeit von 'Einen', ich ausgeschlossen beide Versionen von Stax.
InformationsquelleAutor der Antwort scot
Hatte ich auch Schwierigkeiten die Aufhebung einer Abhängigkeit in einer Dritten Bibliothek. Ich verwendet scot ' s Ansatz mit der Ausgrenzung, aber ich habe auch die Abhängigkeit mit der neueren version in der pom. (Ich habe Maven 3.3.3)
Also für die stAX Beispiel würde es so Aussehen:
InformationsquelleAutor der Antwort Patrick Koorevaar
Was Sie im inneren des
</dependencies>
tag der root-pom aufgenommen werden, indem alle untergeordneten Module des root-pom. Wenn alle Ihre Module zu verwenden, die Abhängigkeit, das ist der Weg zu gehen.Jedoch, wenn nur 3 von 10 Ihres Kindes Module verwenden einige Abhängigkeiten, die Sie nicht wollen, dass diese Abhängigkeit bei allen Ihren untergeordneten Module. In diesem Fall können Sie nur die Abhängigkeit innerhalb der
</dependencyManagement>
. Dies wird sicherstellen, dass jedes Kind-Modul, muss die Abhängigkeit zu erklären, in Ihren eigenen pom-Datei, aber Sie nutzen die gleiche version, die Abhängigkeit, wie in Ihre</dependencyManagement>
tag.Können Sie auch die
</dependencyManagement>
ändern Sie die version in transitiven Abhängigkeiten, da die version angegeben in der oberen die meisten pom-Datei verwendet werden. Dies kann nützlich sein, wenn Ihr Projekt umfasst ein externes Projekt B v1.0, enthält ein weiteres externes Projekt C v1.0. Manchmal passiert es, dass eine Sicherheitslücke gefunden wird, in Projekt C v1.0, das ist korrigiert in v1.1, aber die Entwickler von B sind langsam zu aktualisieren, Ihr Projekt zu verwenden v1.1 C. In diesem Fall können Sie einfach erklären, eine Abhängigkeit von C v1.1 in deinem Projekt root-pom inside", und alles wird gut sein (vorausgesetzt, dass B v1.0 noch in der Lage sein zu kompilieren mit C v1.1).InformationsquelleAutor der Antwort Kent Munthe Caspersen