我们正在尝试将我们的项目从 JDK 11 迁移到 JDK 17。但是 Kotlin 版本甚至更旧!该应用程序到处都使用 Kotlin 1.4.0。因此,在迁移过程中,我们也决定升级 Kotlin。
因此,当我将 pom 文件中的 JAR 依赖项从 1.4.0 更新到 2.0.21 时,一个类确实喜欢这种更改,并抛出如下异常:
[ERROR] C:/Users/sam2004/git/app/develop/app-common/src/main/java/com/trial/app/ui/util/CacheConfig.kt:[53,64] Cannot access 'constructor(reflectionCacheSize: Int = ..., nullToEmptyCollection: Boolean = ..., nullToEmptyMap: Boolean = ..., nullIsSameAsDefault: Boolean = ..., singletonSupport: SingletonSupport = ..., strictNullChecks: Boolean = ..., useKotlinPropertyNameForGetter: Boolean = ..., useJavaDurationConversion: Boolean = ...): KotlinModule': it is private in 'com/fasterxml/jackson/module/kotlin/KotlinModule'.
有问题的依赖项是:
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.module/jackson-module-kotlin -->
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
<version>2.18.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.jetbrains.kotlin/kotlin-stdlib-jdk8 -->
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>2.0.21</version>
</dependency>
我可以看到来自 Jackson jar 的错误。
导致问题的代码行是:
private val mapper = ObjectMapper().apply { registerModule(KotlinModule()) }
这个问题有解决办法吗?或者我是否必须回退到旧版本,因为这可能会导致大量代码更改?
根据文档,以下之一应该有效:
val mapper = jacksonObjectMapper()
val mapper = ObjectMapper().registerKotlinModule()
val mapper = jsonMapper {
addModule(kotlinModule())
}
(注意小写
kotlinModule()
)