Maven dependencyManagement版本在传递依赖中被忽略
尽管我有一个指定版本18的<dependencyManagement>部分,但Maven正在传递拉伸番石榴版本16。
快速总结:
gwizard-example
取决于gwizard-config
gwizard-config
有一个父pom, gwizard-parent
gwizard-parent
具有指定番石榴版本18的<dependencyManagement> 谢天谢地,这是一个开源项目,所以你可以直接看到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的依赖关系树显示番石榴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上链接的poms正在改变; 向gwizard-services
(它直接声明一个番石榴dep)添加一个依赖项,以gwizard-example
“固定”这个问题。 这里仍然存在某种不良的潜在行为。
更新 :创建了这个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的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>
链接地址: http://www.djcxy.com/p/29691.html
上一篇: Maven dependencyManagement version ignored in transitive dependencies
下一篇: Maven: best way of linking custom external JAR to my project?