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

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

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

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

如何解决?

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


当前回答

在@Sean Stayns的回答中引用了一个场景,以防它能帮助到任何人:如果你把你的项目保存在谷歌Drive文件夹中——不要这样做。只需将项目移动到本地驱动器即可解决此问题。

In the case we were trying to solve, were were also getting the "It is currently in use by another Gradle instance" error and nothing we tried here worked. The process ID was unknown as well. It didn't immediately occur to me to ask where the project was being saved, so in case anyone new to Android Dev is saving their projects to a Google Drive folder, just move over to your local drive. I would have just left this as a comment in @Sean Stayns's answer, but I can't comment. Hopefully it benefits someone.

其他回答

只是杀死java.exe进程修复我的问题。

——编辑——

如果没有修复,则:

关闭OpenJdkPlatform进程。

如果没有修复,则:

删除所有”。(windows: c:\ users \用户名\.gradle)。

如果没有修复,则:

重命名或删除.gradle目录后重试。

有时,您需要在每次构建错误后运行此代码几次

对我来说,它需要两次,首先我得到锁定错误,我运行这段代码,然后我再次得到另一个文件的锁定错误,所以我再次运行代码,在结束时它正常工作。

find ~/.gradle -type f -name "*.lock" -delete

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

根据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进程退出而不释放锁来永久修复它。

在我的情况下,我做了所有*。锁定文件删除和Android Studio的无效缓存选项。但问题不断出现。

在终端中手动运行gradlew显示,当JVM堆空间耗尽时,gradle进程会过早退出。这个回答帮助解决了这个问题。

./gradlew build #to detect what crashes gradle processes
./gradlew --stop #to stop any running gradle processes

在解决问题后(例如:堆耗尽)

find .gradle/ -type f -name "*.lock" -delete #delete lock files
./gradlew build #Try building the project

我也遇到过同样的问题,我做了两步就解决了。

我的JDK没有安装在Mac上(我忘了安装),我安装了它。 我删除了位于这个路径/Users/icon_developer/的缓存文件夹中的所有项目。Gradle /和重建项目。 它工作!