我正在使用第三方依赖项,该依赖项将某些杰克逊文件着色为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”。欢迎任何建议或纠正!
答案 0 :(得分:0)
着色的目的是使库开发人员可以包括其依赖关系的特定版本,而不影响其库用户使用此类依赖关系的不同版本的能力。所以我不知道您为什么要尝试用其他版本覆盖阴影的Jackson类。您一定会遇到问题,因为您使用的第三方库尚未编写为使用杰克逊2.9.6版。
如果要在编写的代码中使用Jackson 2.9.6,则不要relocate
类,而应将com.fasterxml.jackson.core...
导入所编写的类。