JCenter 是否永久关闭(10 月 31 日)?

Que*_*ery 84 android maven jcenter

\n

主持人注意:这似乎是服务中断。Stack Overflow无法为此问题提供支持

\n
\n
   > Failed to list versions for com.google.http-client:google-http-client-android.\n         > Unable to load Maven meta-data from https://jcenter.bintray.com/com/google/http-client/google-http-client-android/maven-metadata.xml.\n            > Could not HEAD \'https://jcenter.bintray.com/com/google/http-client/google-http-client-android/maven-metadata.xml\'.\n               > Read timed out\n
Run Code Online (Sandbox Code Playgroud)\n

我试图构建一个 Android 应用程序,但出现了上述错误。当我连接到 \xe2\x80\x9chttps://jcenter.bintray.com/com/google/http-client/google-http-client-android/maven-metadata.xml\xe2\x80\x9d 时,nginx 403出现错误。JCenter挂了?我应该怎么办?

\n

HBB*_*B20 58

更新:2022 年 11 月 8 日

\n

还有一件事。关注此处事件

\n
\n

太棒了;

\n

是的。JCenter 现在已关闭。但有一种方法可以解决这个问题。JCenter 不久前已停用,并以只读模式保持可用。到目前为止,还没有任何关于何时再次可用的更新。根据您的具体情况,您可以选择快速或不那么快速的选择。

\n
\n

我可以在哪里查看状态?

\n

此处报告了新事件。看一下这个

\n

正如 @Adrian 在评论中提到的,您可以在Gradle 的事件状态页面上检查当前事件的状态。状态显示“已解决”,但我仍然可以\xe2\x80\x99t 制作该项目。所以我想知道该状态页面是否只显示 JCenter 对 Gradle Plugin Portal 的影响,而不显示 JCenter 的总体状态。

\n
\n

我现在能做什么?

\n

推荐更新:

\n

现在该事件已通过更新 gradlePluginPortal 以充当 JCenter 镜像(几乎)得到解决,很有可能在之前添加以下存储库jcenter()应该可以解决该问题:

\n
google()\nmavenCentral()\ngradlePluginPortal() \n
Run Code Online (Sandbox Code Playgroud)\n

临时解决方案:

\n

切换 Gradle 的离线模式,如下所示。这适用于本地计算机,但它不适用于CI

\n

切换离线模式选项

\n

稳健的解决方案:

\n

放弃已弃用的服务始终是个好主意。大多数活跃的库现在都托管在其他流行的存储库上,例如 Google 存储库、Maven Central或 Gradle 插件存储库。

\n

要在您的项目中添加这些存储库,请在存储库块中添加以下内容(您可能已经拥有这些存储库)。顺序很重要。确保将它们放在jcenter()告诉 Gradle 在尝试从中提取之前查看其他存储库之前jcenter()放置它们。

\n

提示:进行全局搜索jcenter()并确保包含jcenter()这些其他存储库的每个存储库块。

\n
 repositories {\n    ...\n    google()\n    mavenCentral()\n    gradlePluginPortal() \n    jcenter()\n    ...\n }\n
Run Code Online (Sandbox Code Playgroud)\n

执行 Gradle 同步和清理构建,看看是否有效。

\n
\n

那不起作用吗?

\n

别担心(暂时)。这很常见。在某些情况下,上述解决方案无法单独工作\xe2\x80\x99:

\n
    \n
  1. 当从其他存储库移动时jcenter()(例如mavenCentral(),作者决定更新版本号。这仅仅意味着您需要更新该依赖项的版本才能从其他存储库获取它。查找在失败的构建日志中显示为不可用的库。查找其 GitHub 或开发文档以查看最新版本。Gradle 同步 + 干净的构建。

    \n
  2. \n
  3. 我们刚刚添加的存储库是受欢迎的存储库,但它们并不是唯一的存储库。当库的作者不得不从 JCenter 切换到其他地方时,他们没有选择其中之一。在这种情况下,请检查 GitHub 页面或开发人员文档。通常作者将所需的存储库放在这些页面上。如果您发现您的项目中不存在该存储库,请添加它。Gradle 同步 + 干净的构建。

    \n
      \n
    • 注意:一些作者选择存储库选项主要是jitpack.io因为它比其他选项更快更容易。但您应该意识到对此的担忧。来自 Gradle 的Melix总结了 jitpack.io 的担忧。由于潜在的安全问题,我建议在添加之前咨询团队和安全专家。
    • \n
    \n
  4. \n
  5. 好吧,现在是时候不用担心了。您很有可能正在使用某些已弃用或不再维护的库。找到该库的 GitHub 页面,查看作者是否在自述文件中声明它已弃用或不再维护。您甚至可以检查上次提交的时间。如果是不久前,则意味着它不再维护,并且作者不关心将库从jcenter()任何其他存储库移动。

    \n
      \n
    • 转到存储库的 GitHub 问题。一定有人发布了有关搬离计划的问题jcenter。如果幸运的话,有人甚至可能创建了分叉并将该分叉托管在其他地方。例如,我spanny在其中一个项目中使用了它,而作者没有移动它。古斯塔沃·罗斯关心足够关心分叉并移动。
    • \n
    • 没有人分叉并搬家吗?那么你有两个选择。\n
        \n
      1. 寻找一个可以为您做同样事情的替代活动库。当然,这很耗时,但也是远离已弃用资源的好主意。
      2. \n
      3. 如果您没有时间集成新库或不存在其他库,那么就成为英雄并创建 GitHub 项目的分支并移动。
      4. \n
      \n
    • \n
    \n
  6. \n
  7. 但是,嘿,我不记得在我的代码库中放置了有问题的库?这意味着,它是传递依赖(直接依赖的依赖)。再次检查您的直接依赖项的最新版本,希望新版本已修复此问题。

    \n
  8. \n
\n

如何检查直接依赖和传递依赖?

\n
    \n
  • 你失败的构建日志有答案。
  • \n
\n

构建日志带注释的屏幕截图

\n

希望此时您已经可以正常构建了。如果没有,那么希望 JCenter 尽快回来并开始计划离开它。

\n


Ste*_*eve 29

最终,经过几个小时的头部刘海后,问题得到了解决。在 中,在->android/build.gradle的顶部添加以下内容。allprojectsrepositories

它将jcenter()在配置阶段从所有依赖项中删除并将其替换为mavenCentral().

它应该看起来像这样:

allprojects {
  repositories {
      all { ArtifactRepository repo ->
          println repo.url.toString()
          if (repo.url.toString().startsWith("https://jcenter.bintray.com/")) {
              project.logger.warn "Repository ${repo.url} removed."
              remove repo
              mavenCentral()
          }
      }
      gradlePluginPortal() // Add this if you get further errors
      ...other repositories
  }
}
Run Code Online (Sandbox Code Playgroud)


小智 8

是的,你并不孤单。今天 JCenter 似乎很不景气。

我的解决方案是将所有更改jCentermavenCentral from root/android/build.gradle

另外,不要忘记图书馆node_module/*error library*/android/build.gradle


小智 6

我也遇到了这个问题,我不太确定为什么 JCenter 返回 403,但是你可以通过在存储库设置中添加mavenCentral()before来解决这个问题jcenter(),如下所示:

    repositories {
        ...
        mavenCentral() // Add this line
        jcenter()
        ...
    }
Run Code Online (Sandbox Code Playgroud)


can*_*see 6

我认为 Maven Central 并不是 JCenter 的完整替代品。\n我使用的是阿里云的镜像。jcenter()用。。。来代替maven { url "https://maven.aliyun.com/repository/jcenter" }

\n

我不知道它\xe2\x80\x99是否可以从中国境外访问,或者阿里云是否审查了某些软件包,或者它是否是最新的。

\n

更换指南:

\n

在文件android/build.gradle中:

\n
buildscript {\n    ...\n    repositories {\n        ...\n-        jcenter()\n+       maven { url "https://maven.aliyun.com/repository/jcenter" }\n    }\n}\nallprojects {\n+   buildscript {\n+       repositories {\n+           maven { url "https://maven.aliyun.com/repository/jcenter" }\n+       }\n+   }\n    repositories {\n        ...\n-       jcenter()\n+       maven { url "https://maven.aliyun.com/repository/jcenter" }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n