即使我有一个< dependencyManagement>,Maven仍在传递番石榴版本16。指定版本18的部分。
快速摘要:
gwizard-example
取决于gwizard-config
gwizard-config
有一个父pom,gwizard-parent
gwizard-parent
有< dependencyManagement>它指定了番石榴版本18 谢天谢地,这是一个开源项目,所以你可以直接看到poms:gwizard-parent,gwizard-config,gwizard-example。但是,这是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>
...和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>
gwizard-config的依赖关系树正确显示了番石榴18:
[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
然而,gwizard-example的依赖树显示了guava 16(导致问题):
[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
这是使用Maven v3.2.5。我很困惑。帮助
可能相关:dependencyManagement in parent ignored
UPDATE :github上链接的poms正在发生变化;在gwizard-services
中添加了对gwizard-example
(直接声明guava dep)的依赖关系“修复了”问题。这里仍然存在某种不良的潜在行为。
更新:创建了this JIRA issue
答案 0 :(得分:9)
有一件简单的事情。 dependencyManagement
未声明真正使用的依赖关系,它仅定义可以使用的版本等。
如果您定义类似的内容,则不会导致更改。
<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>
如果你真的想覆盖你树中使用的版本,你需要定义一个真正的依赖: 因此,基于上面的定义,您还需要添加以下内容:
<dependencies>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
</dependency>
</dependencies>
如果您已添加此内容,请稍后通过mvn dependency:tree
进行检查。
答案 1 :(得分:0)
在这种情况下,Maven无法解决版本传递依赖问题。
使用maven bom概念可以使用此问题。
在下面的链接中查看bom的maven文档 http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Management
这是另一个解释bom用法的博客 http://howtodoinjava.com/maven/maven-bom-bill-of-materials-dependency/
在您解决此问题的情况下,您需要在项目gwizard-example的dependencyManagement部分中添加以下依赖项。
<dependency>
<groupId>org.gwizard</groupId>
<artifactId>gwizard-parent</artifactId>
<version>${gwizard.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>