即使我有一个指定版本18的部分,Maven仍在过渡性地引入了 Guava 的版本16。
快速总结:
gwizard-example
取决于gwizard-config
gwizard-config
有一个父pom,gwizard-parent
gwizard-parent
具有,它指定了 Guava 幸运的是,这是一个开源项目,因此您可以直接看到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的依赖关系树正确显示了 Guava 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
更新:github上链接的poms正在更改;在
gwizard-services
中添加一个对gwizard-example
的依赖关系(直接声明一个 Guava dep)可以解决该问题。这里仍然存在某种不良的底层行为。UPDATE :已创建this JIRA issue
最佳答案
有一件简单的事情。 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
进行检查。