插件门户中断后续
引言
ℹ️ 2024 年 7 月 15 日更新 |
---|
有关插件门户和JCenter的最新信息,请参阅我们最近的博客文章。 |
2023年6月23日UTC时间9:00,Gradle用户开始遇到从Gradle插件门户解析构件的问题,原因是JFrog对JCenter上托管的构件进行了更改。JCenter停止直接提供文件,并将所有请求重定向到Maven Central。这是一项未经宣布的更改。
我们联系了JFrog,他们回复说这是一项测试,他们会恢复JCenter提供构件的服务。
UTC时间约18:30,JCenter恢复正常行为。
本文描述了此次中断对构建的影响,从类似中断中恢复的方法,以及我们将来如何消除对JCenter的依赖。
仍然直接使用JCenter的用户还应参考我们关于JCenter在Gradle构建中普遍关闭的原始博客文章。
对构建中使用Gradle插件的影响#
当JFrog停止从JCenter提供构件时,所有请求都被重定向到Maven Central。这可能以不同的方式影响构建。在本博客文章中,我们重点关注从插件门户解析Gradle插件的问题。
背景信息#
插件门户仅托管与Gradle插件相关的构件。插件门户将Gradle构建重定向到JCenter以解析插件所需的传递依赖。其中一些传递依赖由JCenter托管,有些则从Maven Central镜像。
此外,一些非常旧版本的Gradle插件也托管在JCenter上。这是因为它们历史上托管在JFrog的Bintray服务上。在Bintray于2021年5月关闭后,我们取消了插件门户与Bintray的集成,但我们仍将这些构件重定向到JCenter,因为JFrog承诺将JCenter保持为只读状态。
当JCenter发生更改时,插件门户可能不再提供某些构件或提供不同的构件。
缺失的构件#
当JCenter停止提供构件时,任何仅在JCenter上可用的构件都将变为不可用。
例如,一个10年前发布到JCenter但从未发布到Maven Central的库将不再可用。
因此,当尝试从插件门户解析依赖项时,Gradle构建可能会失败。这包括
- 依赖于非常旧版本的插件的构建。这些插件可能仅托管在JCenter上,并且该版本的插件可能不再可用。
- 依赖于传递性依赖于托管在其他地方的库的插件的构建。仅由JCenter托管的库可能不再可用。
不同版本#
任何依赖于发布到JCenter和Maven Central的构件的插件在使用动态版本时,可能会解析到不同的版本。
例如,一个发布到JCenter,后来又发布到Maven Central的库,只有发布到Maven Central的版本可用。
Gradle构建可能不会在解析依赖项时失败,但构建可能会解析到不同的版本。
不同构件#
任何依赖于发布到JCenter和Maven Central的构件的插件可能会有不同的行为。
例如,一个发布到JCenter,后来又发布到Maven Central的库,即使是相同版本,也可能有不同的依赖项。一个库可能在JCenter上是为Java 6构建的,而在Maven Central上是为Java 8构建的。已签名的构件可能会受到影响并由不同的密钥签名。
Gradle构建可能不会在解析依赖项时失败,但这些依赖项的行为可能已更改。
使用依赖验证的构建应该会因为这些差异而导致验证失败。当上游仓库提供不同的构件时,这些失败需要手动干预。
从中断的构建中恢复#
Gradle无法控制JCenter的更改。在我们能够摆脱JCenter之前,这种中断可能会再次发生。
您可以采取以下措施来恢复:
- 识别直接使用JCenter进行构建逻辑的构建,并将其更改为使用Maven Central。
- 识别由JCenter提供的构建逻辑依赖项。
如果您有来自JCenter的依赖项
- 更新到最新的插件版本,因为它可能不再需要仅依赖JCenter。
- 删除未使用的直接依赖项。
- 切换到更新的坐标。一些依赖项可能已迁移到Maven Central上的新坐标。
- 迁移到替代库。一些依赖项可能有托管在Maven Central上的替代方案。
- 对于传递依赖,排除不必要的依赖。
请注意,上述大部分内容也适用于仅限JCenter的应用程序依赖项。
Gradle正在做什么#
Gradle将分析每个插件的最新版本,并确定哪些需要仅在JCenter上可用的传递依赖项。我们的目标是在对社区尽可能少干扰的情况下摆脱JCenter,以防止再次发生此类意外更改。
根据该信息,Gradle将发布后续博客文章,其中包含后续步骤,并联系受影响的插件作者,看他们是否可以发布一个仅需要托管在Maven Central上的依赖项的插件版本。
在JCenter正常工作时已经无法解析的插件,即那些依赖项托管在其他仓库中的插件,将不属于该分析的范围。
反馈 #
如果您有任何问题,请在我们的论坛或Gradle 社区 Slack上告知我们。