Maven正在过渡地引入番石榴的版本16,尽管我有一个<dependencyManagement>指定版本18的部分。
快速总结:
gwizard-example
依赖于gwizard-config
gwizard-config
有一个父pom,gwizard-parent
- CCD_ 5具有<dependencyManagement>它规定了番石榴的版本18
值得庆幸的是,这是一个开源项目,所以您可以直接看到poms:gwizardparent、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示例中声明的无装饰依赖:
<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示例的依赖树显示了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
更新:github上链接的pom正在更改;在gwizard-example
中添加对gwizard-services
的依赖(它直接声明了一个番石榴dep)"修复"了这个问题。这里仍然存在一些不良的潜在行为。
更新:创建了此JIRA问题
有一件简单的事情。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
进行检查。
Maven在这种情况下没有解决版本传递依赖性问题。
这个问题可以通过使用maven bom
概念来使用。
查看Maven文档中的bom
。
下面是另一个博客,它解释了bom
的用法。
在解决此问题的情况下,您需要在项目gwizard-example
的dependencyManagement
部分添加以下依赖项。
<dependency>
<groupId>org.gwizard</groupId>
<artifactId>gwizard-parent</artifactId>
<version>${gwizard.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>