1. 问题描述
编译maven应用,报错:Kotlin: [Internal Error] java.lang.NoSuchFieldError: FILE_HASHING_STRATEGY
java
Kotlin: [Internal Error] java.lang.NoSuchFieldError: FILE_HASHING_STRATEGY
at org.jetbrains.kotlin.jps.targets.KotlinJvmModuleBuildTarget.updateChunkMappings(KotlinJvmModuleBuildTarget.kt:362)
at org.jetbrains.kotlin.jps.build.KotlinBuilder.doBuild(KotlinBuilder.kt:463)
at org.jetbrains.kotlin.jps.build.KotlinBuilder.build(KotlinBuilder.kt:299)
at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1609)
at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1238)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1389)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:1203)
at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:971)
at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:527)
at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:236)
at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:135)
at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:387)
at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:212)
at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:211)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
at java.base/java.lang.Thread.run(Thread.java:833)
看了下,java应用里有部分代码是 Kotlin 写的。根据报错判断,应是 Kotlin 版本过低所致。
2. 解决方案
参考 stackoverflow 的这个解决方案 ,配置 Kotlin Compiler version 等参数:

3. 新问题及解法
按照上述配置完 Kotlin Compiler version 等参数后,再次编译运行,又报错如下:
java
Kotlin: Unknown -Xjvm-default mode: enable, supported modes: [disable, all-compatibility, all]
查了下,这个错误是因为使用的 -Xjvm-default=enable 参数在较新版本的 Kotlin 编译器中已经被废弃或移除了。Kotlin 编译器现在只支持以下几种模式:
disable(默认)allall-compatibility
再设置下参数 -Xjvm-default=all, 能正常编译运行了。
