Gradle依赖项排除不适用于传递依赖项

时间:2018-01-03 06:31:49

标签: java spring gradle

当我尝试启动服务器时出现以下异常:

Caused by: java.lang.IncompatibleClassChangeError: class org.springframework.core.type.classreading.ClassMetadataReadingVisitor has interface org.springframework.asm.ClassVisitor as super class

一些stackoverflow帖子暗示我的classpath中有spring-asm的冲突版本。通过gradle依赖性分析,我看到我没有spring-asm的多个版本,但我确实有spring-core的多个版本(版本3.1.4和5.0.2)

org.springframework:spring-core:5.0.2.RELEASE (conflict resolution)
+--- runtime
...
+--- project :foundation-util
...
org.springframework:spring-core:3.1.4.RELEASE -> 5.0.2.RELEASE
+--- com.abc:adcontentserviceclient:1801
|    +--- project :domain-cs-bl
|    |    +--- runtime
...

我试图排除版本3.1.4,但无法使其正常工作。我试图在依赖性级别和配置级别排除它。

configurations {
    all*.exclude group: 'spring-framework', module: 'spring-core'
}

dependencies {

compile(group: 'com.abc, name: 'adcontentserviceclient', version: "${adCsVersion}", changing: true) {
    exclude group: 'org.springframework', module: 'spring-core'
}

即使进行了上述更改,我仍然可以在依赖性分析输出中找到spring-core:3.1.4.RELEASE。

1 个答案:

答案 0 :(得分:0)

输出

org.springframework:spring-core:3.1.4.RELEASE -> 5.0.2.RELEASE

意味着虽然某处需要3.1.4.RELEASE,但gradle实际上正在使用5.0.2.RELEASE来满足这一要求。因此,您无需排除3.1.4.RELEASE。你的问题出在其他地方。

您仍然可以排除3.1.4.RELEASE,但您在问题中提供的详细信息不足以告诉您它为何无效。