首页 文章

从Gradle导入项目时,IntelliJ中的依赖项错误

提问于
浏览
1

我有一个带有Swagger编译依赖项的项目,它带来了jackson-databind v2.4.5和一个testCompile依赖项,该库使用了带有jackson-databind v2.6.6的AWS SDK .

从gradle运行测试时,一切正常,并且正确更新的jackson依赖v2.6.6在类路径上:

+--- io.swagger:swagger-jersey2-jaxrs:1.5.10
|    +--- io.swagger:swagger-jaxrs:1.5.10
|    |    +--- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.4.5
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.4.5 -> 2.6.6
|    |    |    \--- org.yaml:snakeyaml:1.12 -> 1.13
|    |    +--- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.4.5
|    |    |    +--- com.fasterxml.jackson.core:jackson-core:2.4.5 -> 2.6.6
|    |    |    +--- com.fasterxml.jackson.core:jackson-databind:2.4.5 -> 2.6.6

intellij依赖包含两个版本:

Both dependencies displayed

但是,当从IntelliJ运行测试时,IntelliJ会创建一个“类路径jar”(因为类路径太长) . 在检查META-INF / MANIFEST.MF中的类路径时,我可以看到只包含较小版本的jar(2.4.5) .

当测试使用AWS SDK时,这会导致异常:

java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.ObjectMapper.enable([Lcom/fasterxml/jackson/core/JsonParser$Feature;)Lcom/fasterxml/jackson/databind/ObjectMapper;

因为较旧的jackson API不包含此方法 .

这有点可预防吗?我目前正在使用一种解决方法,我在testCompile依赖项中添加了jackson-databind依赖项的2.6.6版本 . 但我想避免这种情况,因为

  • 我们没有直接使用jackson,因为intellij,它在gradle脚本中

  • 每次使用AWS SDK的库发生更改时,我都必须更改jackson依赖项

请注意,我们使用IntelliJ测试运行器只是因为它比通过本地工作站上的gradle运行测试更快(主要是由于增量编译) .

1 回答

  • 0

    不能说,为什么IDE仍然有这个库的2个版本,尽管Gradle解决了依赖关系 . 您可以尝试手动排除对jackson-databind v2.4.5的传递依赖,如下所示:

    compile('io.swagger:swagger-jersey2-jaxrs:1.5.10') {
        exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'
    }
    

    然后同步Gradle和IDEA项目 .

相关问题