当前位置: 首页 > 知识库问答 >
问题:

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

杜苏燕
2023-03-14

我有一个在Swagger上具有编译依赖关系的项目,它带来了jackson databind v2.4.5,还有一个在库上具有testCompile依赖关系的项目,该库使用了AWS SDK,它带来了jackson databind v2.6.6。

从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依存关系包含两个版本:

然而,当从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版本。但我想避免这种情况,因为

  1. 我们没有直接使用jackson,只是因为intellij,它出现在gradle脚本中
  2. 每次使用AWS SDK的库发生更改时,我也必须更改jackson依赖项

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

共有1个答案

葛雨华
2023-03-14

虽然Gradle解决了依赖关系,但无法解释为什么IDE仍然有这个库的两个版本。您可以尝试手动排除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项目。

 类似资料:
  • 知道为什么会这样吗?我的同事可以毫无问题地将项目导入他们的IntelliJ。 单击不执行任何操作。 系统: null

  • 我有一个类似于 B项目依赖于A项目 项目B的settings.gradle和build.gradle如下所示 格雷德尔酒店 格雷德尔先生 当我尝试在本地机器(Gradle版本3.2)上构建项目B时,它成功构建,一切看起来都很好。 当我尝试在jenkins中构建相同的项目(与我的本地版本相同的gradle版本)时,我得到了错误 它看起来像詹金斯,它是无法计算出相对路径。 我该怎么解决这个问题? 在j

  • 是否有办法将GradleJava项目导入IntelliJ 2017.2. x并应用一些设置,例如 代码样式 vcs设置 从Gradle在项目层面? 我注意到例如Grails框架使用了idea-gradle-plugin,但这只能与Gradle任务结合使用。 我不想使用Gradle任务生成IntelliJ项目文件。每当我导入文件。 这可能吗?

  • 我通过这个链接将一个gradle项目作为依赖项导入另一个gradle项目。有没有办法将maven项目作为依赖项包含到gradle项目中?

  • 我正试图将一个libgdx项目(桌面、ios和android)导入到我mac上的eclipse中,我在本地的git存储库中。 当我试图将我的项目导入到eclipse(导入>>Gradle>>Gradle项目,然后为整个libgdx项目添加我的根文件夹)时,我试图“构建模型”,但随后我得到了一个错误:

  • 我有一个关于智能想法11的小问题。我刚刚从subversion导入了一个项目--它是一个maven项目。但是我在maven库依赖项中遇到了一个问题,因此我无法自动包含所有maven依赖项-IDEA仅在我打开该类时才显示依赖项错误/这就是我在这里得到的结果: 所以我希望所有的依赖项都自动添加--这是可能的还是我必须通过所有的类文件来识别和添加maven依赖项?! 但我认为逻辑上它不会包含和检查前面的