我有一个可以在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守护进程构建它,没有它,但问题仍然存在。
答案 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.jdk
和 Brew
。
答案 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。