为什么 gradle 初始化有时需要很长时间?

Aar*_*ron 5 java gradle gradlew

当我执行 gradle 时,有时需要很长时间才能“初始化”(最多 40 秒)。

PS C:\Users\Username\project> gradle build
<------------> 0% INITIALIZING [35s]
> IDLE
Run Code Online (Sandbox Code Playgroud)

我尝试执行什么目标似乎并不重要(compileJava并且testbuild需要这么长时间)

如果我在花了这么长时间后不久重新运行 Gradle,它会非常快并且在几毫秒或几秒内执行,但如果我等待更长的时间才能重新运行,它又需要很长时间。

这在我的不同项目中发生过,并且它gradlew也发生在gradle.

我使用的是 Windows 10,使用 Gradle 7.4。

esk*_*tos 14

这是以下问题 https://github.com/gradle/gradle/issues/17955

在初始化期间,Gradle 尝试确定文件系统监视是否可以安全启用。在连接了网络驱动器的 Windows 计算机上,根据您的网络设置,这可能需要很长时间。

好的解决方法不是禁用 FSW,而是显式启用它。这将禁用需要很长时间的发现过程,同时保持 FSW 启用并使您的构建速度更快。

这可以在命令行上完成:

gradlew.bat --watch-fs yourTaskName

Run Code Online (Sandbox Code Playgroud)

或者执着于你的gradle.properties

org.gradle.vfs.watch=true
Run Code Online (Sandbox Code Playgroud)


teq*_*cat 1

编辑:使用@eskatos 答案。

显式启用文件系统监视自然比禁用它更好。

有点违反直觉,文档中也没有任何提示,但它确实有效。

---- 老答案从这里开始

TLDR:禁用文件系统监视(如果你能负担得起)

gradlew.bat --no-watch-fs yourTaskName
Run Code Online (Sandbox Code Playgroud)

细节:

同样的问题困扰了我一个月。最后我厌倦了,在检查了 gradle 调试输出(-d 键)后,我发现在进入 IDLE 之前,gradle 报告:

[INFO] [org.gradle.tooling.internal.provider.FileSystemWatchingBuildActionRunner] Watching the file system is configured to be enabled if available
[DEBUG] [org.gradle.internal.operations.DefaultBuildOperationRunner] Build operation 'Build started for file system watching' started
[DEBUG] [org.gradle.internal.watch.registry.impl.DefaultFileWatcherRegistry] Started listening to file system change events
Run Code Online (Sandbox Code Playgroud)

所以我禁用了 FS 观看功能,嗖!

https://docs.gradle.org/current/userguide/gradle_daemon.html#enabling_and_disabling_file_system_watching