无法使用GradleUserHomeScopeServices创建FileHasher类型的服务,createCachingFileHasher()

axkjgtzd  于 2023-08-06  发布在  其他
关注(0)|答案(6)|浏览(120)

下面是我的问题的上下文:

  • 一个gitlab ci yml管道
  • 在同一个实习岗位上做几份工作
  • 所有作业都使用需要使用其缓存的任务分级器
  • 所有作业共享同一gradle缓存

我的问题:

有时,当同时存在多个管道时,我会得到:
哪里出错了:无法使用GradleUserHomeScopeServices.createCachingFileHasher()创建FileHasher类型的服务。
等待锁定文件哈希缓存(/cache/.gradle/caches/5.1/fileHash)超时。它当前正由另一个Gradle示例使用。所有者PID:149我们的PID:137所有者操作:我们的业务:锁定文件:/cache/myshop/reunion/.gradle/caches/5.1/fileHash/fileHash.lock
我找不到任何关于gradle使用的锁系统的文档。我不明白为什么当gradle操作不写入缓存目录时,锁定被定位。
有人知道锁是怎么工作的吗?或者,我可以简单地更改超时的持续时间,以允许伴随任务在失败之前等待足够长的时间?
翻译:www.DeepL.com/Translator
我试着在没有守护进程的情况下调整gradle,没有工作。

yb3bgrhw

yb3bgrhw1#

我通过杀死Activity Monitor(MacOS)中的所有java进程解决了这个问题。希望对你有帮助。

v7pvogib

v7pvogib2#

当您尝试在不同主机上运行的多个Gradle进程之间共享Gradle缓存时,通常会遇到此错误。我假设你的CI管道运行在不同的主机上,或者它们至少彼此隔离运行(例如,作为不同Docker容器的一部分)。
不幸的是,这样的场景是Gradle的currently not supported。Gradle开发人员Stefan Oehme写了这篇评论。共享Gradle用户主页:
Gradle进程将在无争用时持有锁(以提高性能)。争用是通过进程间通信宣布的,当进程在Docker容器中被隔离时,这是不起作用的。
他在后续评论中更清楚地指出(由我强调):
可能还有其他我们尚未发现的问题,因为在机器之间共享用户主页并不是我们为设计的用例。
换句话说:Gradle目前不支持在不同的机器或其他独立进程之间共享Gradle用户主目录,甚至只是共享其中该高速缓存部分。(参见my related question。)
我想解决这个问题的唯一方法是:

  • 确保CI管道中的Gradle进程可以相互通信(例如,通过在同一主机上运行它们),或者
  • 不直接共享Gradle用户主页,例如,通过为所有CI管道创建副本,或
  • 不要并行运行CI管道。
dxxyhpgq

dxxyhpgq3#

另一种可能发生这种情况的情况是,其中一些Gradle相关文件位于需要重新身份验证的云文件系统(如OneDrive)上。
1.重新验证到云文件系统

  1. Android Studio中的“无效缓存并重新启动”
to94eoyn

to94eoyn4#

1.首先将config file /etc/sysconfig/jenkins更改编辑为root用户JENKINS_USER="root"
2.将/var/lib/jenkins文件权限修改为root chown -R root:root jenkins
3.重新启动服务service jenkins restart

p1tboqfb

p1tboqfb5#

您的例外:

What went wrong: Could not create service of type FileHasher using 
GradleUserHomeScopeServices.createCachingFileHasher().

Timeout waiting to lock file hash cache 
(/cache/.gradle/caches/5.1/fileHashes). It is currently in use by another Gradle instance. 
Owner PID: 149 
Our PID: 137 
Owner Operation: 
Our operation: 
Lock file: /cache/myshop/reunion/.gradle/caches/5.1/fileHashes/fileHashes.lock

字符串
这对我来说很有效:

rm /cache/myshop/reunion/.gradle/caches/5.1/fileHashes/fileHashes.lock


(删除锁定文件)

w3nuxt5m

w3nuxt5m6#

如果你使用的是vscode,并且是在windows中,那么在任务管理器中搜索vscode和与gradle关联的JAVA应该在那里。结束它,你应该很好地去。

相关问题