为什么我的Kotlin Gradle构建模具退出代码为137?

时间:2018-05-02 15:58:16

标签: gradle kotlin

在运行Kotlin代码库的测试时,我们在CI环境中看到了神秘的故障。

gradle test编译了代码和测试就好了。测试开始了,似乎都通过了。但随后Gradle退出了代码137(表明它被SIGKILL杀死),因此CI系统认为构建失败了。

限制Gradle的JVM大小没有帮助。 --no-daemon--max-workers选项也没有。

这是在Java 8 JVM上使用Kotlin 1.2.40和Gradle 4.3。

1 个答案:

答案 0 :(得分:2)

这个案子的罪魁祸首是Kotlin编译器。

默认情况下,Kotlin编译器会在后台生成一个守护程序,以便后续编译作业更快。对于非常重要的Kotlin代码库,这个过程最终会占用大量内存。

它的存在导致Gradle达到CI容器的内存限制,而Linux OOM killer正在杀死Gradle进程。

解决方案:Tell the Kotlin compiler not to spawn the background process.事实证明这是一个设置环境变量的简单问题:

GRADLE_OPTS=-Dkotlin.compiler.execution.strategy=in-process

使用该变量,Kotlin编译在Gradle JVM中内联运行,因此当Gradle继续运行测试时,其数据可以被垃圾收集。

将选项传递给gradle命令而不是在环境中设置它也是有效的。

相关问题