0

我正在使用第三方依赖项,它将一些杰克逊文件着色为 shaded.jackson.core.* 或 shaded.jackson.databind.* 并在其应用程序中使用它(作为导入)。但是,我想使用与此依赖项中阴影不同的杰克逊版本。所以,我试图在 gradle 中使用 relocate 功能来同样(使用最新版本)对 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 类调用的。欢迎任何建议或更正!

4

1 回答 1

0

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

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

于 2018-11-01T00:48:47.983 回答