Gradle中的依赖项着色

时间:2018-10-31 22:52:07

标签: java gradle jackson dependencies shadowjar

我正在使用第三方依赖项,该依赖项将某些杰克逊文件着色为shaded.jackson.core。*或shaded.jackson.databind。*,并在其应用程序中使用它(作为导入)。但是,我要使用不同于此依赖项中阴影阴影的版本的杰克逊。因此,我试图在gradle中使用重定位功能,以同样方式(与最新版本一样)对shadeson.jackson的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”。在这里,从第三方依赖项中的某个Java类调用了“ shaded.jackson.core.JsonProcessingException”。欢迎任何建议或纠正!

1 个答案:

答案 0 :(得分:0)

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

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