【问题标题】:Dependency shading in gradlegradle中的依赖着色
【发布时间】:2018-10-31 22:52:06
【问题描述】:

我正在使用第三方依赖项,它将一些杰克逊文件着色为 shaded.jackson.core.* 或 shaded.jackson.databind.* 并在其应用程序中使用它(作为导入)。但是,我想使用与此依赖项中阴影不同的杰克逊版本。所以,我试图在 gradle 中使用 relocate 功能来对 jackson 依赖项进行类似(使用最新版本)的 shaded.jackson,然后使用它。

  shadowJar {
      mergeServiceFiles()
      classifier = ''
      dependencies {
        include(dependency('com.fasterxml.jackson.core:jackson-annotations:2.9.6'))
        include(dependency('com.fasterxml.jackson.core:jackson-core:2.9.6'))
        include(dependency('com.fasterxml.jackson.core:jackson-databind:2.9.6'))
      }
      relocate 'com.fasterxml.jackson.core', 'shaded.jackson.core'
  }

但是当我使用 gradle 构建项目时,我得到“原因:java.lang.ClassNotFoundException:shaded.jackson.core.JsonProcessingException”。在这里,“shaded.jackson.core.JsonProcessingException”是从第三方依赖项中的某个 java 类调用的。欢迎任何建议或更正!

【问题讨论】:

  • 您的意思是希望第三方依赖项使用不同版本的 Jackson,还是希望对您编写的代码使用不同版本的 Jackson?
  • 第三方使用不同版本的jackson
  • 你为什么要这么做?

标签: java gradle jackson dependencies shadowjar


【解决方案1】:

着色的目的是使库开发人员可以包含其依赖项的特定版本,而不会影响其库用户使用此类依赖项的不同版本的能力。所以我不知道你为什么试图用不同的版本覆盖阴影杰克逊类。您一定会遇到问题,因为您使用的第三方库尚未编写为使用 Jackson 版本 2.9.6。

如果您想在编写的代码中使用 Jackson 2.9.6,则不要 relocate 类,并将 com.fasterxml.jackson.core... 导入您编写的类中。

【讨论】:

    猜你喜欢
    • 2015-10-28
    • 2018-02-20
    • 2022-08-16
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 2023-03-25
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多