Maven transitively in Version ziehen 16 von Guave, obwohl ich habe einen <dependencyManagement> Abschnitt die Version 18.Maven dependencyManagement Versionsabhängigkeiten in transitiv ignoriert
Die kurze Zusammenfassung gibt:
gwizard-example
hängt aufgwizard-config
gwizard-config
hat einen Elternteil pom,gwizard-parent
gwizard-parent
hat <dependencyManagement> die Version 18 von Guave gibt
Zum Glück ist dies ein Open-Source-Projekt, so dass Sie die Poms direkt sehen können: gwizard-parent, gwizard-config, gwizard-example. Allerdings ist hier das wichtige Bit in gwizard-parent
:
<properties>
<guava.version>18.0</guava.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>${guava.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
... und die No-Frills-Abhängigkeit in gwizard-Beispiel erklärt:
<properties>
<gwizard.version>0.5</gwizard.version>
</properties>
<dependencies>
<dependency>
<groupId>org.gwizard</groupId>
<artifactId>gwizard-config</artifactId>
<version>${gwizard.version}</version>
</dependency>
</dependencies>
Der Abhängigkeitsbaum für gwizard-config zeigt Guave 18 richtig:
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ gwizard-config ---
[INFO] org.gwizard:gwizard-config:jar:0.5
[INFO] +- com.google.inject:guice:jar:4.0-beta5:compile
[INFO] | \- com.google.guava:guava:jar:18.0:compile
jedoch der Abhängigkeitsbaum für gwizard-Beispiel zeigt, Guave 16 (was Probleme verursacht):
[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ gwizard-example ---
[INFO] org.gwizard:gwizard-example:jar:1.0-SNAPSHOT
[INFO] +- org.gwizard:gwizard-config:jar:0.5:compile
[INFO] | +- com.google.inject:guice:jar:4.0-beta5:compile
[INFO] | | \- com.google.guava:guava:jar:16.0.1:compile
Dies ist mit Maven v3.2.5. Ich bin verwirrt. Hilfe?
Möglicherweise verwandte: dependencyManagement in parent ignored
UPDATE: Die poms auf GitHub verbunden verändern; Hinzufügen einer Abhängigkeit zu gwizard-services
(die direkt eine Guave dep erklärt) in gwizard-example
"behoben" das Problem. Es gibt immer noch eine Art schlechtes zugrunde liegendes Verhalten.
UPDATE: this JIRA issue
Dies macht keinen Sinn; oder zumindest scheint es nicht sehr nützlich zu sein. Der Punkt von 'dependencyManagement' ist, dass ich eine Version für transitive Abhängigkeiten angeben kann. Hier wird Guave über Guice transitiv eingezogen. Warum kontrolliert meine 'dependencyManagement' nicht die von guice gezogene Version? Warum sollte ich Guava als Abhängigkeit angeben, wenn meine Bibliothek nicht direkt von Guava abhängig ist? – stickfigure
Die einfache Antwort darauf ist, weil der Betreuer des Pom von Guice sich dafür entschieden hat, eine andere Version zu verwenden. Sie können also das dort verwendete Pom nicht direkt steuern. Sie können es nur indirekt steuern. BTW: 'dependencyManagement' kontrolliert nicht. 'Abhängigkeiten' statt dessen, weil es näher an Ihrem Projekt ist. – khmarbaise