与许多开发人员共享 Gradle 用户主页有啥缺点?

Posted

技术标签:

【中文标题】与许多开发人员共享 Gradle 用户主页有啥缺点?【英文标题】:Any Drawbacks of Sharing the Gradle User Home with Many Developers?与许多开发人员共享 Gradle 用户主页有什么缺点? 【发布时间】:2017-06-01 22:22:26 【问题描述】:

问题

简而言之

在同一文件系统上的多个开发人员之间共享 Gradle 用户主页有什么缺点吗?

更详细

我们的目标是使用本地 Gradle 缓存节省磁盘空间。 Gradle 用户指南建议使用the cache is safe for concurrent access。目前似乎没有任何方法可以独立于 Gradle 用户主目录配置缓存位置,所以基本上问题归结为共享 Gradle 用户主目录(默认为 ~/.gradle/)。在快速测试中,我们可以验证同一用户的多个并发进程确实可以在单个 Gradle 用户主页上完美运行。

但是多个用户会有什么问题吗?我可以想象权限问题可能会成为问题。有没有人有这样的设置经验? Gradle 用户主页中是否有不应共享的文件?

很明显,某些特定于用户的配置不再适用于共享用户主页(例如个性化 init scripts 或 gradle.properties)。您是否有更好的建议来使用本地 Gradle 缓存节省磁盘空间?这样的建议可能是以某种方式自动将每个用户的缓存修剪为asked in this SO question。

背景

我们使用 Gradle 来处理更大的二进制文件(目前每个文件大约 500M 并且还在增长)。这包括从其他大型二进制工件构建它们作为输入依赖项。我们将构建工件存储在 Artifactory 中;上传和下载非常顺利。但是,由于我们有大约 50 名开发人员每周混合和匹配许多文件,因此每个开发人员的本地 Gradle 缓存增长得相当快。由于所有开发人员都在同一个文件系统上工作,我们正在考虑为所有开发人员提供一个共享的 Gradle 缓存以节省磁盘空间。

【问题讨论】:

【参考方案1】:

我刚刚找到了 Gradle 开发人员 Stefan Oehme wrt 的 this comment。共享 Gradle 用户主页:

如果 Gradle 进程处于非竞争状态,它们将持有锁(以提高性能)。争用是通过进程间通信来宣布的,当进程在 Docker 容器中被隔离时,这不起作用。

更清楚的是,他在a follow-up comment 中声明(由我突出显示):

可能还有其他我们尚未发现的问题,因为在机器之间共享用户主页并不是我们设计的用例

换句话说:Gradle 目前不正式支持在不同机器之间共享 Gradle 用户主页,甚至只是共享其中的缓存部分。

Gradle 6.1+ 更新

Gradle 用户主页仍然不应该被共享,但是,它现在至少“完全可以复制 [依赖] 缓存”(参见 the user guide)。不确定这对于来自不同主机的并发访问意味着什么;它仍然为比以前官方支持的更多共享场景提供了基础。

Gradle 6.4+ 更新

Gradle 用户主页仍然不打算共享,但是,Gradle 至少为sharing the dependency cache 添加了一个选项,例如,在 CI 场景中的容器化/临时构建中。

【讨论】:

【参考方案2】:

正如你提到的~/.gradle/,我猜你是在*nix 机器上? 然后只需将缓存文件夹设为某个共享文件夹的符号链接,就可以了。缓存将被共享,每个开发者仍然拥有自己的 Gradle 用户主页。

【讨论】:

感谢您的回答,我也想过这个问题。但是,问题仍然存在,这是否会带来任何不利影响。例如,如果用户从不同的主机访问缓存,这也会起作用吗? “Gradle 依赖缓存使用基于文件的锁定”(via)——这种锁定是否也能在不同的主机和不同的用户帐户之间可靠地工作? 我不确定。或许你应该在 Gradle 论坛上提问,在那里你也可能会从 Gradle 核心开发者那里得到答案。

以上是关于与许多开发人员共享 Gradle 用户主页有啥缺点?的主要内容,如果未能解决你的问题,请参考以下文章

SQL和Oracle的功能上有啥区别

Django Web开发 投票与评论

DIV+CSS有啥优点?

Linux的消息队列有啥缺点?

到处使用共享指针有啥陷阱?

如何在 Eclipse Swing/maven 和 Androidstudio/gradle 项目之间共享代码?