2011-01-13 4 views
1

Ich bin häufig in der Situation, in der eine Abhängigkeit in einem Top-Level-Modul benötigt wird, da eines der Module, auf die es angewiesen ist, die gleiche Abhängigkeit hat.Mit Maven 2, sollten Abhängigkeiten neu deklariert werden, wenn sie transitiv zugänglich sind?

Zum Beispiel:

my-module 
+- spring-core 
    \- commons-logging 

Ich bin zufrieden mit der Version der transitiven Abhängigkeit sollte also unter der Annahme, die depdency, in diesem Fall auf commmons-logging, neu deklariert werden wie folgt:

my-module 
+- spring-core 
| \- commons-logging 
\- commons logging 

Or sollte ich einfach akzeptieren, dass die Abhängigkeit transitiv erreicht wird?

+0

mögliches Duplikat von [Maven: Wie gehen Sie mit direkten und transitiven Abhängigkeiten um?] (Http://stackoverflow.com/questions/4662011/maven-how-do-you-deal-mit-abhängigkeiten-) that-sind-beide-direkt-und-transitiv) – Robin

+0

Duplizieren http://stackoverflow.com/questions/4662011/maven-how-do-you-deal-mit-abhängigkeiten-das-sie-beiden-direkt-und- transitive # 4662446 – Robin

Antwort

3

IMO ist es besser, es ausdrücklich zu erklären, so dass Sie die Kontrolle über die genaue Version haben, können Sie verwenden. Andernfalls kann die tatsächlich verwendete Version stillschweigend geändert werden, wenn eine andere Abhängigkeit aktualisiert oder eine neue, scheinbar nicht verwandte Abhängigkeit eingeführt wird, die transitiv von einer neueren Version der anderen Bibliothek abhängt.

+0

Angesichts, dass, sobald veröffentlicht, sollten Module nicht ändern, würde dieses Problem auftreten? In meinem Beispiel wäre ich an eine bestimmte Version von "spring-core" und implizit an eine bestimmte Version von "commons-logging" gebunden. Nur wenn ich auf eine neuere Version von 'spring-core' upgraden würde, würde ich möglicherweise eine neuere Version von 'commons-logging' bekommen, richtig? –

+0

@Nick, ja. Oder wenn Sie eine neue Abhängigkeit in Ihr Projekt aufnehmen. –

+0

Ja, ich fange an zu denken, dass, während Maven eine großartige Arbeit macht, Abhängigkeiten zu verwalten, wenn es ein wenig zu leicht macht, sie hinzuzufügen, was, wenn du nicht vorsichtig bist, einige interessante Nebenwirkungen mit deinem Klassenpfad haben kann. Erraten Sie die verschiedenen Ziele, die durch das Abhängigkeits-Plugin (http://maven.apache.org/plugins/maven-dependency-plugin/plugin-info.html) bereitgestellt werden. Sind Sie ein Freund, wenn Sie Abhängigkeiten hinzufügen. –

1

Normalerweise lasse ich sie transitiv.

Es könnte sinnvoll sein, wenn Sie eine bestimmte Version überschrieben werden soll. Zum Beispiel, wenn Spring-Core zum Beispiel ein Commons-Logging mit Version 1.25 benötigt und Sie (aus verschiedenen Gründen) eine 1.26 benötigen und kompatibel sind, sollten Sie die Commons-Logging-Abhängigkeit von Spring-Core ignorieren und Ihre Version in Ihrem Pom deklarieren.

Das gleiche, wenn es einen Konflikt zwischen zwei anderen gibt.