使用Gradle构建Kotlin项目有时会导致NoClassDefFoundError失败
我不能可靠地重现这个问题,因为它是零星的。 这是我用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
或添加 –--parallel
选项没有帮助 - 我正在使用Gradle
4.2
可能是什么问题呢?
这是Kotlin的一个已知问题 。 不幸的是在这个时候,我们不知道究竟是什么原因造成的。
这个问题的原因是关于使用两个或更多不同的Kotlin版本。 就我而言,我使用Android Studio 3和IntelliJ IdeaU 2017.我使用的解决方案是:
-
在任一IDE中检查您的Kotlin版本。 在这种情况下,您应该将Kotlin的编译器更新为相同的版本。
-
如果只使用一个IDE,最好的解决方案是删除IDE和所有缓存。
欲了解更多信息,请参阅Kotlin社区 。
- 如何运行./gradlew测试
- 如何在Gradle中设置Kotlin源代码?
- Gradle 3.0.0(在Android Studio 3.0中)重新排列任务序列(用Kotlin模块编译时)?
- 关于gradle依赖的未解决的参考?
- Kotlin和Gradle没有Maven中央?
- 许多小模块,或几个大型模块的最佳构建性能?
- 无法为org.gradle.api.Projecttypes的项目’core’设置未知属性’transitive’
- 使用Kotlin和Java编译器的Android项目需要很长时间才能编译 – 超过20分钟
- 无法使用Gradle在IntelliJ Community Edition中添加应用程序服务器