有时候,当同时有多个管道时,我会得到:
出了什么问题: 无法使用GradleUserHomeScopeServices.createCachingFileHasher()创建FileHasher类型的服务。
超时等待锁定文件哈希缓存(/cache/.gradle/caches/5.1/fileHashes)。当前,另一个Gradle实例正在使用它。 所有者PID:149 我们的PID:137 业主经营: 我们的运作: 锁定文件:/cache/myshop/reunion/.gradle/caches/5.1/fileHashes/fileHashes.lock
我找不到有关gradle使用的锁系统的任何文档。我不明白为什么gradle操作没有写入缓存目录时为什么会定位锁。
有人知道锁的工作原理吗?还是我可以简单地更改超时时间,以使伴随的任务在失败之前等待足够长的时间?
由www.DeepL.com/Translator
翻译我试图在没有守护程序的情况下调整gradle,没有用。
答案 0 :(得分:4)
我通过取消活动监视器(MacOS)中的所有java
进程来解决此问题。希望对您有所帮助。
答案 1 :(得分:1)
尝试在不同主机上运行的多个Gradle进程之间共享Gradle缓存时,通常会出现此错误。我假设您的CI管道运行在不同的主机上,或者它们至少彼此隔离运行(例如,作为不同Docker容器的一部分)。
不幸的是,这种情况是Gradle的currently not supported。 Gradle开发人员Stefan Oehme撰写了this comment wrt。共享Gradle用户主页:
如果没有竞争,Gradle进程将持有锁(以提高性能)。竞争是通过进程间通信来宣布的,当将进程隔离在Docker容器中时,该争用将不起作用。
更明确的是,他在a follow-up comment中声明(我强调):
我们可能还没有发现其他问题,因为在计算机之间共享用户家不是我们设计的用例。
换句话说:Gradle当前不正式支持在不同的机器之间共享Gradle用户主目录,甚至只是其中一部分缓存在其他机器上或以其他方式隔离的进程。 (另请参见my related question。)
我想针对您的情况解决此问题的唯一方法是:
答案 2 :(得分:0)
可能发生的另一种情况是,其中某些与Gradle相关的文件位于需要重新认证的云文件系统(如OneDrive)上。