without the que pom plugin example dependency create compiling central basedir maven maven-3

the - Versión de gestión de dependencias de Maven ignorada en dependencias transitivas



syntax to create jar file without compiling the build (2)

Hay una cosa simple. dependencyManagement no declara una dependencia que realmente se usa , solo se están definiendo versiones, etc. que se pueden usar.

Si define algo como esto, no resultará en un cambio.

<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>

Si realmente desea sobrescribir la versión que se usa en su árbol, necesita definir una dependencia real: Por lo tanto, en base a la definición anterior, también debe agregar lo siguiente:

<dependencies> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </dependency> </dependencies>

Si ha agregado esto, verifique después a través de la mvn dependency:tree .

Maven está activando la versión 16 de guava, aunque tengo una sección <dependencyManagement> que especifica la versión 18.

El resumen rápido:

  • gwizard-example depende de gwizard-config
  • gwizard-config tiene un pom padre, gwizard-parent
  • gwizard-parent tiene <dependencyManagement> que especifica la versión 18 de guava

Afortunadamente, este es un proyecto de código abierto, por lo que puedes ver los poms directamente: gwizard-parent , gwizard-config , gwizard-example . Sin embargo, aquí está el bit importante en 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>

... y la dependencia de bajo coste declarada en 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>

El árbol de dependencias para gwizard-config muestra guava 18 correctamente:

[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

Sin embargo, el árbol de dependencias para gwizard-example muestra guava 16 (lo que causa problemas):

[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

Esto está utilizando Maven v3.2.5. Estoy desconcertado ¿Ayuda?

Posiblemente relacionado: dependencyManagement en padre ignorado

ACTUALIZACIÓN : Los poms vinculados en github están cambiando; agregar una dependencia a gwizard-services (que declara directamente una dependencia de guayaba) en gwizard-example "solucionó" el problema. Todavía hay algún tipo de mal comportamiento subyacente aquí.

ACTUALIZACIÓN : Creado este problema JIRA


Maven no resuelve el problema de dependencia transitiva de la versión en este caso.

Este problema puede ser usado usando el concepto maven bom.

Consulte la documentación de maven para obtener más información en el siguiente enlace http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management

Aquí hay otro blog que explica el uso de http://howtodoinjava.com/maven/maven-bom-bill-of-materials-dependency/ de bom

En su caso para resolver este problema, debe agregar la dependencia a continuación en la sección de administración de dependencias del proyecto gwizard-example.

<dependency> <groupId>org.gwizard</groupId> <artifactId>gwizard-parent</artifactId> <version>${gwizard.version}</version> <type>pom</type> <scope>import</scope> </dependency>