【发布时间】:2017-06-20 12:13:01
【问题描述】:
我遇到了这个奇怪的问题,我不知道是什么问题。
我有一个结构如下的多模块 java maven 项目:
+ A (parent)
+-+-B
| +--C
| +--D
我在父pom(A)中添加了一个依赖:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>1.8.5</version>
<exclusions>
<exclusion>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
</exclusion>
<exclusion>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
</exclusion>
</exclusions>
</dependency>
注意:A以外的其他模块需要1.8.5版本
在模块 C 和 D 中,必须使用 2.3.0 版本,因此我使用此依赖项覆盖父 pom A 的 1.8.5 版本:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
<exclusions>
<exclusion>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
</exclusion>
<exclusion>
<groupId>com.mchange</groupId>
<artifactId>mchange-commons-java</artifactId>
</exclusion>
</exclusions>
</dependency>
我在模块 C 和 D 的 poms 中添加了这个依赖。C 也是 D 的依赖。所以当我尝试构建项目时,我得到以下错误:
[WARNING] Rule 1: org.apache.maven.plugins.enforcer.DependencyConvergence failed with message:
Failed while enforcing releasability the error(s) are [
Dependency convergence error for org.quartz-scheduler:quartz:1.8.5 paths to dependency are:
+-de.xxx.xxx.xxx:module-D:6.40.1-jat-SNAPSHOT
+-de.xxx.xxx.xxx:module-C:6.40.1-jat-SNAPSHOT
+-org.quartz-scheduler:quartz:1.8.5
and
+-de.xxx.xxx.xxx:module-D:6.40.1-jat-SNAPSHOT
+-org.quartz-scheduler:quartz:2.3.0
所以不知何故,maven 认为模块 C 的石英版本是 1.8.5,但我明确将模块 C 的 pom 中的版本设置为 2.3.0
当我在模块 C 的目录中运行 mvn dependency:tree -Dverbose 时,它似乎是正确的: [INFO] +- org.quartz-scheduler:quartz:jar:2.3.0:compile
有人知道吗?
【问题讨论】:
-
你想使用或覆盖哪个版本,把它放在“dependencyManagement”部分。
标签: java maven dependency-management