使用Gradle构建Kotlin项目时,有时会出现NoClassDefFoundError错误。

3

由于这个问题是零星出现的,我无法可靠地复现。以下是使用Gradle构建Kotlin项目时所得到的结果:

Could not perform incremental compilation: Could not connect to Kotlin compile daemon
Could not connect to kotlin daemon. Using fallback strategy.
:myproj:compileKotlin FAILED
1 actionable task: 1 executed
e: java.lang.NoClassDefFoundError: Could not initialize class kotlin.Unit
warning: the '-d' option with a directory destination is ignored because '-Xbuild-file' is specified
Exception in thread "Thread-25" java.lang.NoClassDefFoundError: Could not initialize class kotlin.Unit
    at org.jetbrains.kotlin.compilerRunner.UtilsKt$runToolInSeparateProcess$readErrThread$1$1.invoke(utils.kt)
    at kotlin.io.TextStreamsKt.forEachLine(ReadWrite.kt:154)
    at org.jetbrains.kotlin.compilerRunner.UtilsKt$runToolInSeparateProcess$readErrThread$1.invoke(utils.kt:68)
    at org.jetbrains.kotlin.compilerRunner.UtilsKt$runToolInSeparateProcess$readErrThread$1.invoke(utils.kt)
    at kotlin.concurrent.ThreadsKt$thread$thread$1.run(Thread.kt:18)
e: java.lang.NoClassDefFoundError: Could not initialize class kotlin.Unit
...

我使用以下选项运行Gradle:
  • gradle assemble --no-daemon --parallel
  • 我在Docker和本地机器上尝试过,这甚至在CI服务器上也会发生
  • 这个错误完全是随机的,我无法找出原因
  • 它也会在单模块和多模块项目中发生
  • 删除--parallel或添加--daemon选项都没有帮助
  • 我正在使用Gradle 4.2
可能的问题是什么?

2
Gradle 版本? - guenhter
你能在这里发布你的依赖项列表及其版本吗? - Giorgio Antonioli
我更新了我的问题。我的依赖关系不重要,因为这种情况发生在所有类型的 Kotlin 项目中。 - Adam Arold
@AdamArold 如果你在两个 Kotlin 依赖中使用了不同版本的 Kotlin,那就很重要。 - Giorgio Antonioli
请提供 Kotlin gradle 插件的版本号。 - Ilya
2个回答

3

这是一个与Kotlin相关的已知问题。不幸的是,目前我们还不知道导致它发生的确切原因。


3
这个问题的原因与使用两个或更多不同版本的Kotlin有关。在我的情况下,我使用Android Studio 3和IntelliJ IdeaU 2017。我使用并且起作用的解决方案是:
  • 检查你的IDE中的Kotlin版本。在这种情况下,你应该将Kotlin的编译器更新到相同的版本。

  • 如果你只使用一个IDE,最好的解决方案是删除你的IDE和所有缓存。

欲了解更多信息,请参阅 Kotlin 社区

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接