Maven è transitivamente tirando in versione a 16 di guava, anche se ho un > sezione < dependencyManagement che specifica versione 18.versione Maven dependencyManagement ignorato in dipendenze transitive
La sintesi rapida:
gwizard-example
dipende sugwizard-config
gwizard-config
ha un pom genitore,gwizard-parent
gwizard-parent
ha <dependencyManagement> che specifica la versione 18 di guava
fortuna questo è un progetto opensource, in modo da poter vedere i pon direttamente: gwizard-parent, gwizard-config, gwizard-example. Tuttavia, qui è il bit importante 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>
... e la dipendenza senza fronzoli dichiarata nel gwizard-example:
<properties>
<gwizard.version>0.5</gwizard.version>
</properties>
<dependencies>
<dependency>
<groupId>org.gwizard</groupId>
<artifactId>gwizard-config</artifactId>
<version>${gwizard.version}</version>
</dependency>
</dependencies>
L'albero di dipendenza per gwizard-config mostra guava 18 correttamente:
[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
Tuttavia, l'albero dipendenza per gwizard-esempio mostra guava 16 (che causa problemi):
[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
Questo utilizza Maven v3.2.5. Sono sconcertato. Aiuto?
Possibilmente corrispondenti dependencyManagement in parent ignored
AGGIORNAMENTO: I poms collegati su github cambiano; aggiungendo una dipendenza a gwizard-services
(che dichiara direttamente un dep di guava) in gwizard-example
"risolto" il problema. C'è ancora una sorta di cattivo comportamento sottostante qui.
UPDATE: Creato this JIRA issue
Questo non ha senso; o almeno, non sembra molto utile. Il punto di 'dependencyManagement' è di permettermi di specificare una versione per le dipendenze transitive. Qui, la guava viene tirata in transito via guiz. Perché il mio 'dependencyManagement 'non controlla la versione tirata da guizza? Perché dovrei specificare guava come dipendenza se la mia libreria non dipende direttamente da guava? – stickfigure
La semplice risposta a questo è, perché il manutentore del pom of guice ha deciso di usare un'altra versione. Quindi non puoi controllare direttamente il pom che viene usato lì. Puoi controllarlo solo indirettamente. BTW: 'dependencyManagement' non controlla. 'dependencies' invece fa sì che sia più vicino al tuo progetto. – khmarbaise