13

如何防止 gradle 与守护进程交谈?

./gradlew --no-daemon -Porg.gradle.daemon=false -Dorg.gradle.daemon=false build -x test
Starting daemon
IDLE

我们在 ecs 上运行 jenkins 节点,所以守护进程似乎并没有给我们买太多东西。此外,我们在一个并行的 jenkins 管道块中运行了几个 gradle 执行,有时会看到守护程序错误——这是我没想到的:

[org.gradle.cache.internal.DefaultFileLockManager] Waiting to acquire exclusive lock on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Lock acquired on daemon addresses registry.
[org.gradle.cache.internal.DefaultFileLockManager] Releasing lock on daemon addresses registry.
Daemon vm is shutting down... The daemon has exited normally or was terminated in response to a user interrupt.

似乎 gradle 需要周围的守护进程才能使用它。我将尝试放弃并使用 gradle daemon 文档推荐的守护程序。

4

2 回答 2

0

为我投入org.gradle.daemon=false工作~/.gradle/gradle.properties

有一个警告,因为它仍然需要派生一个进程才能更改 JVM 设置。此过程实际上与常规守护程序相同,但对当前构建是私有的,并在之后终止。

为了遵守此构建的 JVM 设置,将分叉一个单一用途的守护进程。请参阅https://docs.gradle.org/7.0/userguide/gradle_daemon.html#sec:disabling_the_daemon。守护进程将在构建结束时停止

如果 JVM 设置已经匹配,则不会执行此操作。

请注意,虽然您获得了“效率较低”的构建,但您确实会在每次运行后修剪 gradle 缓存。否则它只会在共享守护进程退出时被修剪,这可能永远不会出现在 CI 系统中。

于 2021-05-26T13:03:17.020 回答
-7

放弃并接受 --no-daemon 不太理想。使用守护程序运行,即使在基于 jenkins ECS 的单次使用节点上也可以提高性能。对于多个 gradle 执行通过管道并行块同时在同一节点上运行的情况尤其如此。

如果守护程序有问题,那么修复它比尝试禁用它更好。

于 2019-10-18T16:25:13.457 回答