在Jenkins上构建Android项目时,Gradle构建守护程序意外消失(可能已被杀死或可能已崩溃)

时间:2016-05-11 18:50:08

标签: android jenkins gradle

我有一个可以在Android Studio上成功构建的Android项目。

现在我想在Jenkins上构建它。但是当我这样做时,我收到以下错误: Gradle构建守护程序意外消失(可能已被杀死或可能已崩溃)

例外是:

org.gradle.launcher.daemon.client.DaemonDisappearedException: Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
    at org.gradle.launcher.daemon.client.DaemonClient.handleDaemonDisappearance(DaemonClient.java:222)
    at org.gradle.launcher.daemon.client.DaemonClient.monitorBuild(DaemonClient.java:198)
    at org.gradle.launcher.daemon.client.DaemonClient.executeBuild(DaemonClient.java:162)
    at org.gradle.launcher.daemon.client.DaemonClient.execute(DaemonClient.java:125)
    at org.gradle.launcher.daemon.client.DaemonClient.execute(DaemonClient.java:80)
    at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:43)
    at org.gradle.internal.Actions$RunnableActionAdapter.execute(Actions.java:173)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:241)
    at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:214)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:35)
    at org.gradle.launcher.cli.JavaRuntimeValidationAction.execute(JavaRuntimeValidationAction.java:24)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:207)
    at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33)
    at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22)
    at org.gradle.launcher.Main.doAction(Main.java:33)
    at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:55)
    at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:36)
    at org.gradle.launcher.GradleMain.main(GradleMain.java:23)

我阅读了相关主题,但没有用。我尝试使用gradle守护进程构建它,没有它,但问题仍然存在。

20 个答案:

答案 0 :(得分:32)

编辑看起来新版本的Gradle发生了一些变化。

Since 3.0 you should not disable the daemon on your CI anymore

  

[我们]建议两位开发人员使用[守护程序]'机器和持续集成服务器。

     

但是,如果您怀疑Daemon使您的CI构建不稳定,您可以禁用它以为每个构建使用新的运行时,因为运行时与以前的构建完全隔离。

以前的答案

It's recommended to turn off daemon on any CI server。使用此选项将其禁用

--no-daemon

答案 1 :(得分:11)

这似乎是与内存相关的问题。然而,按照Oleg的建议禁用该守护进程似乎有所帮助。

使用

  

org.gradle.daemon =假

in

  

gradle.properties

在〜/ .gradle文件夹或项目的文件夹中。

参考:https://docs.gradle.org/current/userguide/gradle_daemon.html#sec:disabling_the_daemon

答案 2 :(得分:11)

在遇到此崩溃后,我尝试了几件事让GradleDaemon停止在我的CI服务器上运行。这些都没有效果。

我在gradle.org论坛上找到了答案,该论坛表明GradleDaemon无论如何都会一直运行。 --no-daemon标志只会让它为这个特定的构建运行而不是无限期地继续运行。

  

如果指定需要分叉的JVM参数,Gradle将分叉一个新的JVM。无论您是否需要守护程序进程,运行的类都称为GradleDaemon。 --no-daemon开关应该使forked进程单独使用而不是长时间运行的守护进程,但它仍然会运行GradleDaemon类。

来源:https://discuss.gradle.org/t/no-daemon-switch-ineffective-if-jvm-settings-cause-new-fork/14919/5

我可能正在读错了,我无法保证答案的有效性,但我认为这个错误的原因只是Gradle的内存不足。因为它总是会运行GradleDaemon。

所以我添加了

org.gradle.jvmargs=-Xmx1024m 

到我的~/.gradle/gradle.properties文件,它不再给我这个错误。

答案 3 :(得分:8)

在我们的案例中,问题是由CI服务器传递带有非ascii字符的环境变量(即在提交作者的名称中)。

file.encoding=utf-8添加到Gradle属性会立即解决问题。

答案 4 :(得分:2)

没有人会碰到这个,因为这很傻,但是...

我的问题是我的提交消息中出现了一个奇怪的字符 ...我从gitlab复制了先前的提交消息,其中包含一个表情符号,并将其粘贴到合并请求的标题中,普通的:bug:语法。

akru的答案帮助我指出了正确的方向

答案 5 :(得分:1)

在许多情况下,

Gradle build daemon disappeared unexpectedly意味着自己或甚至是Java崩溃。 就我而言,它是java。填写bug报告:https://bugzilla.redhat.com/show_bug.cgi?id=1408857

查看名为hs_err_pid%p.log的文件,其中%p是目录中进程的PID,来自您运行的gradle任务。

更新:看起来像gradle itself issue。因为我使用原生jansi。有问题的解决方法:

ln -sb /dev/null /home/pasha/.gradle/native/jansi/1.17.1/linux64/libjansi.so

答案 6 :(得分:1)

我已经尝试了--no-daemon解决方案,但我的构建仍然以相同的DaemonDisappearedException失败。

我通过增加运行Jenkins的服务器的RAM来解决这个问题。在AWS EC2中,这意味着必须增加EC2实例类型,这会导致RAM增加。

答案 7 :(得分:1)

gradle -Dorg.gradle.jvmargs=-Xmx1536m assembleDebug

或者将org.gradle.jvmargs=-Xmx1536m添加到 gradle.properties文件

答案 8 :(得分:1)

哇,以我为例,关闭Android Studio并重新打开就可以了,并且错误消失了。 :)

答案 9 :(得分:0)

此处发布的所有解决方案均不适用于我的 Mac。我尝试删除主目录和项目目录中 .gradle 目录下的锁定文件,然后我尝试另外删除 ~/.gradle/caches,退出尽可能多的进程以腾出空间并设置 -Xmx守护进程到 4GB,确保不存在其他 Java 进程,但这些都没有帮助。我什至尝试清除主目录和项目目录中的 .gradle 目录。很难相信,但它在重新启动操作系统后又开始工作了。我在这个项目中使用 gradle 构建已经超过 2 年了,这是第一次发生这种情况,所以也许这与 Mac 而非 gradle 有关。作为参考,我使用的是使用 macOS 10.15.7 安装的 adoptopenjdk-14.jdkBrew

答案 10 :(得分:0)

我遇到了同样的问题,经过长时间的斗争,我删除了一些文件并在内存中获得了一些可用空间。 然后重新启动android studio,现在完美运行。

答案 11 :(得分:0)

我在gradle.properties文件中添加了相同的问题

android.useAndroidX=true
android.enableJetifier=true
org.gradle.jvmargs = -Xmx2g

答案 12 :(得分:0)

添加gradle.properties文件。

org.gradle.daemon=true <br>
org.gradle.jvmargs=-Xmx1024m <br>
android.useDeprecatedNdk=true <br>
android.useAndroidX=true <br>
android.enableJetifier=true <br>
file.encoding=utf-8

答案 13 :(得分:0)

组装任务之前。

./gradlew --status

检查守护程序状态。

然后

./gradlew --stop

停止守护程序。

使用

./gradlew assemblerelease  --no-daemon -Dkotlin.compiler.execution.strategy="in-process"

禁用守护程序。

答案 14 :(得分:0)

大多数情况下,您只需要重新启动Android Studio,它便可以正常工作。您还可以执行以下操作:文件->使用Gradle文件同步项目,然后选择文件->使Cachse /重新启动无效。

答案 15 :(得分:0)

我遇到了同样的问题,最终gradle文件中缺少一个参数

基本上,这是一个kotlin项目,其中使用了一些实验协程功能。使用它的类标记为

@OptIn(FlowPreview::class) 

这需要在build.gradle中添加以下参数,尽管它在android studio本地运行得很好

kotlinOptions {
        jvmTarget = "1.8"
        freeCompilerArgs = [ "-Xopt-in=kotlin.RequiresOptIn"]
    }

花了很多时间寻找这个

答案 16 :(得分:0)

转到/gradle.properties,然后删除org.gradle.jvmargs=-Xmx1024m,如果org.gradle.jvmargs=-Xmx1024m不可用,则在您的/gradle.properties中添加此代码。

答案 17 :(得分:0)

在我的情况下,我正在升级我的android studio项目,并使用ZelixKlassMaster混淆了我的代码,因为问题是,我将Zelix上的类路径设置为27,但我的项目是使用android 28希望对我以后的调试工作有帮助,这对我的seed文件正在打印出此错误有帮助

ERROR: Invalid classpath in "classpath" statement at line 69 : "C:\Users\Rab\AppData\Local\Android\Sdk\platforms\android-27\android.jar" is not a valid path.

答案 18 :(得分:0)

有时只是执行Build-> Clean Project的工作-在开始更改其他gradle文件之前,请尝试一下。

答案 19 :(得分:0)

我在Windows 7中使用Android Studio,然后出现此错误。对我有用的是从Windows TaskManager中杀死Java.exe。