我正在升级 JAVA 应用程序。 我正在与
Gradle 8.5
合作,并升级到 JAVA 17
和 Spring Boot 3.2.5
在进行升级时,我遇到了涉及
com.fasterxml.jackson.*
库的问题。
之前,进行故障排除时,我唯一拥有的杰克逊库是:
org.openapitools:jackson-databind-nullable:0.2.4
我收到的错误消息指出:
NoSuchMethodError: void com.fasterxml.jackson.dataformat.yaml.YAMLParser.createChildObject(int, int)
我做了一些相当广泛的研究,并尝试了相当多的可能的解决方案。
我尝试的第一件事是添加到
com.fasterxml.jackson.dataformat-yaml
库中。我最初尝试使用版本2.13.0
,但这似乎并没有解决问题。
我运行
./gradlew dependencyInsight -dependency jackson
查看它可能调用的版本。我发现它在版本 2.12.x
和 2.15.4
之间跳跃。注意到这一点,我尝试通过调整不断变化的软件包版本来强制版本2.15.4
,直到所有版本都调用版本2.14.x
或2.15.4
并将依赖项实现设置为专门调用版本2.15.4
。
这也没有解决问题。所以我然后尝试将软件包更新为使用
2.15.4
或更高版本的版本...这也不起作用。
然后我尝试实现所有相关的杰克逊库并将它们全部指向版本
2.15.4
(jackson-core
、jackson-databind
、jackson-dataformat-yaml
、jackson-datatype-jdk8
等)。不幸的是,这似乎也没有什么区别。
我尝试遵循此处找到的一些建议: 对象映射器 - YAMLFactory - 由于缺少 _createContentReference 方法而导致异常
但这似乎也不起作用,并且增加了新问题,而其他方法现在缺失了......
我在这里有点不知所措,真的需要一些建议。
编辑了为我解决这个问题的方法:
我花了 2 天多的时间来解决这个问题。我找不到任何可行的答案。我什至找不到问题的原因。即使验证只有所需的版本并且所有依赖项都成功解决并且 wwre 没有降级,问题仍然存在。
我最终能够通过在
buildscript {}
部分上方创建 plugins {}
来强制 jackson-core
仅解析为所需版本来解决此问题。