创建JIB镜像时出现Jackson getReadCapabilities方法不存在错误
解决Jib BuildTar任务的Jackson方法缺失问题
环境配置
- jib-gradle 3.2.1
- gradle 6.6
- java 8
构建脚本配置
主build.gradle
buildscript { dependencies { classpath("com.fasterxml.jackson.core:jackson-databind") { version{ strictly("2.13.2") } } classpath("com.fasterxml.jackson.core:jackson-core") { version{ strictly("2.13.2") } } classpath "gradle.plugin.com.google.cloud.tools:jib-gradle-plugin:3.2.1" } }
模块gradle配置
apply plugin: "com.google.cloud.tools.jib"
错误信息
执行jibBuildTar任务时报错:
Caused by: java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonParser.getReadCapabilities()Lcom/fasterxml/jackson/core/util/JacksonFeatureSet; at com.fasterxml.jackson.databind.DeserializationContext.<init>(DeserializationContext.java:212) at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.<init>(DefaultDeserializationContext.java:50) at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext$Impl.<init>(DefaultDeserializationContext.java:391) at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext$Impl.createInstance(DefaultDeserializationContext.java:413) at com.fasterxml.jackson.databind.ObjectMapper.createDeserializationContext(ObjectMapper.java:4737) at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4666) at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3666) at com.google.cloud.tools.jib.json.JsonTemplateMapper.readJsonFromFile(JsonTemplateMapper.java:72) at com.google.cloud.tools.jib.plugins.common.globalconfig.GlobalConfig.readConfig(GlobalConfig.java:49) at com.google.cloud.tools.jib.plugins.common.globalconfig.GlobalConfig.readConfig(GlobalConfig.java:39) at com.google.cloud.tools.jib.gradle.BuildTarTask.buildTar(BuildTarTask.java:136)
已排查情况
- 检查依赖图谱确认无其他Jackson版本引入
- 已强制指定包含目标方法的Jackson 2.13.2版本
- 普通build任务可正常执行
解决方案
1. 全局强制Jackson版本到buildscript配置
单个依赖的strictly配置可能无法覆盖Gradle自身携带的Jackson版本,需要在buildscript中添加全局分辨率策略,确保所有Jackson相关依赖都强制使用2.13.2:
buildscript { repositories { mavenCentral() // 确保仓库配置正确 } dependencies { classpath "gradle.plugin.com.google.cloud.tools:jib-gradle-plugin:3.2.1" classpath "com.fasterxml.jackson.core:jackson-core:2.13.2" classpath "com.fasterxml.jackson.core:jackson-databind:2.13.2" classpath "com.fasterxml.jackson.core:jackson-annotations:2.13.2" // 补充缺失的annotations依赖 } configurations.all { resolutionStrategy { force "com.fasterxml.jackson.core:jackson-core:2.13.2" force "com.fasterxml.jackson.core:jackson-databind:2.13.2" force "com.fasterxml.jackson.core:jackson-annotations:2.13.2" } } }
2. 清理Gradle缓存
Gradle缓存可能残留旧版本Jackson文件,删除缓存目录后重新构建:
# Linux/macOS rm -rf ~/.gradle/caches # Windows rd /s /q %USERPROFILE%\.gradle\caches
3. 检查Gradle启动参数
确认GRADLE_OPTS或其他启动参数中没有引入旧版本Jackson的类路径,避免类加载冲突。
内容的提问来源于stack exchange,提问作者Mudit bhaintwal
相关产品推荐
相关产品推荐

