有时,当同时有几个管道时,我得到:
出了什么问题:无法使用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,但没有工作。
尝试在不同主机上运行的多个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。)
我想解决这个问题的唯一方法是: