我想做一些基本的函数。我正在命令行中运行/构建它。我在看用户指南。还有,做一些简单的任务。

当我开始运行简单的任务时,它被成功构建。但是,在一段时间后,它会显示“它目前正在被另一个Gradle实例使用”,并变成BUILD FAILED。我正在使用终端运行任务。那时候我什么都没做。

如果我关闭产生错误的终端,这个问题就解决了。但是,我知道这不是解决办法。

为什么这个错误经常出现?

如何解决?

并且,请参考任何链接来提高我对Android中Gradle Build系统的知识。


当前回答

在我的案例中,罪魁祸首是限制性防火墙,反病毒系统的一部分。

根据https://discuss.gradle.org/t/timeout-waiting-to-lock-file-hash-cache/21961/2和https://github.com/elastic/elasticsearch/issues/50954#issuecomment-576772154, gradle-issue-8750, gradle服务器正在保留锁,并在其他gradle进程请求时释放它。通信通过本地主机上的UDP套接字进行。因此,如果有防火墙阻止这种通信,gradle保持文件锁和其他gradle进程不能继续。

尝试禁用AV /防火墙,看看问题是否消失。然后运行gradle,如下所示,以更好地了解发生了什么。

gradle --debug --no-daemon

调试日志显示锁的所有者,如果问题仍然存在,杀死锁的所有者。

2021-05-20T19:32:41.105+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] The file lock is held by a different Gradle process (pid: 67494, lockId: 628651820260732672). Pinged owner at port 58442
2021-05-20T19:32:42.330+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] The file lock is held by a different Gradle process (pid: 67494, lockId: 628651820260732672). Pinged owner at port 58442

然后kill -9 67494终止所有者并释放锁。

否则,一段时间后gradle会终止,并报错(在这里说明,这样很容易找到):

* What went wrong:
Gradle could not start your build.
 > Could not create service of type ResourceSnapshotterCacheService using GradleUserHomeServices.createResourceSnapshotterCacheService().
   > Timeout waiting to lock file hash cache (/Users/myusername/.gradle/caches/6.9/fileHashes). It is currently in use by another Gradle instance.
     Owner PID: 67494
     Our PID: 68313
     Owner Operation: 
     Our operation: 
     Lock file: /Users/myusername/.gradle/caches/6.9/fileHashes/fileHashes.lock

其他回答

在我的案例中,罪魁祸首是限制性防火墙,反病毒系统的一部分。

根据https://discuss.gradle.org/t/timeout-waiting-to-lock-file-hash-cache/21961/2和https://github.com/elastic/elasticsearch/issues/50954#issuecomment-576772154, gradle-issue-8750, gradle服务器正在保留锁,并在其他gradle进程请求时释放它。通信通过本地主机上的UDP套接字进行。因此,如果有防火墙阻止这种通信,gradle保持文件锁和其他gradle进程不能继续。

尝试禁用AV /防火墙,看看问题是否消失。然后运行gradle,如下所示,以更好地了解发生了什么。

gradle --debug --no-daemon

调试日志显示锁的所有者,如果问题仍然存在,杀死锁的所有者。

2021-05-20T19:32:41.105+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] The file lock is held by a different Gradle process (pid: 67494, lockId: 628651820260732672). Pinged owner at port 58442
2021-05-20T19:32:42.330+0200 [DEBUG] [org.gradle.cache.internal.DefaultFileLockManager] The file lock is held by a different Gradle process (pid: 67494, lockId: 628651820260732672). Pinged owner at port 58442

然后kill -9 67494终止所有者并释放锁。

否则,一段时间后gradle会终止,并报错(在这里说明,这样很容易找到):

* What went wrong:
Gradle could not start your build.
 > Could not create service of type ResourceSnapshotterCacheService using GradleUserHomeServices.createResourceSnapshotterCacheService().
   > Timeout waiting to lock file hash cache (/Users/myusername/.gradle/caches/6.9/fileHashes). It is currently in use by another Gradle instance.
     Owner PID: 67494
     Our PID: 68313
     Owner Operation: 
     Our operation: 
     Lock file: /Users/myusername/.gradle/caches/6.9/fileHashes/fileHashes.lock

我没有必要删除任何文件来修复这个错误。

我遇到的问题是Gradle实例挂起了,并且在我的任务列表中有6个命令提示项,这些命令提示项是由Java生成的。

强制关闭命令提示符实例允许我像往常一样继续工作。

我在我的项目中也面临着同样的问题,但我通过使项目无效来解决这个问题,所以在android studio中遵循以下步骤

File -> Invalidate cache / Restart…

Android工作室将重新启动,您的问题应该得到解决。

在Mac上遇到同样的问题时,以上这些方法对我都不起作用。但是,有效的方法是打开活动监视器并关闭正在运行的java进程。我还注意到生成了一个.hprof文件,我删除了它。在那之后,我运行了我的项目,它成功了。

Gradle失败消息后面通常跟着相关的进程id,所以应该是这样

Gradle sync failed: Timeout waiting to lock daemon addresses registry [...].
It is currently in use by another Gradle instance.

Owner PID: 1234
Our PID: 5678
Owner Operation: ...

为了解锁,只需杀死所有者进程:

sudo kill -9 1234