Is JCenter down permanently (31 Oct)?

Moderator Note: This appears to be a service outage. Stack Overflow cannot provide support for this issue

   > Failed to list versions for com.google.http-client:google-http-client-android.
> Unable to load Maven meta-data from https://jcenter.bintray.com/com/google/http-client/google-http-client-android/maven-metadata.xml.
> Could not HEAD 'https://jcenter.bintray.com/com/google/http-client/google-http-client-android/maven-metadata.xml'.
> Read timed out

I was trying to build an Android app, but I got the above error. When I connect to “https://jcenter.bintray.com/com/google/http-client/google-http-client-android/maven-metadata.xml”, an nginx 403 error appears. Is JCenter down? What should I do?

26014 次浏览

是的,你并不孤单。 中心今天好像不行了。

我的解决方案是把所有的 jCenter改成 mavenCentralroot/android/build.gradle

还有,不要忘了图书馆 node_module/*error libaray*/android/build.gradle

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

    repositories {
...
mavenCentral() // add this line
jcenter()
...
}

我觉得 MavenCentral 不是 Jcenter 的完美替代品。
我正在使用阿丽云的镜子。用 maven { url "https://maven.aliyun.com/repository/jcenter" }代替 jcenter()

不知道它是否可以从中国以外的地方进入,或者阿里云审查一些包裹,或者它是最新的。

更换指南:

android/build.gradle

buildscript {
...
repositories {
...
-        jcenter()
+       maven { url "https://maven.aliyun.com/repository/jcenter" }
}
}
allprojects {
+   buildscript {
+       repositories {
+           maven { url "https://maven.aliyun.com/repository/jcenter" }
+       }
+   }
repositories {
...
-       jcenter()
+       maven { url "https://maven.aliyun.com/repository/jcenter" }
}
}

更新: 2022年11月8日

还有一起事故,跟着 这里的事故


Tldr;

是的。jcenter正在下降。但是有一个方法可以解决这个问题。jcenter在一段时间前已经日落了,仍然以只读模式可用。到目前为止还没有关于何时可以再次使用的更新。根据您的情况,您可以选择快速或 没那么快


我在哪里可以检查状态?

更新: 新的事件报告在这里。 看看这个

正如@Adrian 在评论中提到的,你可以在 格拉德尔的事故状态页面上检查当前事件的状态。更新: 状态显示“已解决”,但我仍然不能使该项目。因此,我想知道这个状态页面是否只显示了资产担保商业银行对 Gradle Plugin Portal 的影响,而不是整个资产担保商业银行的状态。

到目前为止,我找不到任何地方,报告状态的二进制托盘了。请在下面评论,如果你找到一个。


我现在能做什么?

建议更新:

现在通过更新 gradlePluginPortal 作为 jcenter 镜像(几乎)解决了这个问题,在 jcenter()之前添加以下存储库就很有可能解决这个问题:

google()
mavenCentral()
gradlePluginPortal()

临时解决方案:

切换离线模式的梯度如下所示。这将工作的本地机器,但不工作的 CI 虽然。

Toggle offline mode option

强有力的解决方案:

远离过时的服务总是一个好主意。大部分活动库现在托管在其他流行的知识库上,如 google repo,Maven Central 或 gradle 插件 repo。

要在项目中添加这些存储库,请在存储库块中添加以下内容(您可能已经有了这些内容)。秩序很重要。一定要把他们之前的 jcenter()这告诉评级看看其他回购协议之前,试图拉从 jcenter()

提示: 对 jcenter()进行全局搜索,并确保包含 jcenter()的每个存储库块都有这些其他回购协议。

 repositories {
...
google()
mavenCentral()
gradlePluginPortal()
jcenter()
...
}

做梯度同步和清洁构建,看看是否有效。


没用吗?

不要担心(暂时)。这是很常见的。以上的解决方案在某些情况下不会单独起作用:

  1. 当从 jcenter()转移到其他回购(如 mavenCentral()) ,作者决定更新版本号。这仅仅意味着您需要更新该依赖项的版本,以便从其他回购中获取它。查找在失败的生成日志中显示为不可用的库。查找它的 github 或开发文档来检查最新版本。级别同步 + 干净构建。

  2. 我们刚刚添加的存储库是流行的,但不是唯一的。当图书馆的作者不得不从 jcenter切换到其他地方时,他们没有选择其中之一。在这种情况下,请检查 github 页面或开发人员文档。通常,作者将所需的存储库放在这些页面上。如果发现项目中没有存储库,请添加它。级别同步 + 干净构建。

    • 注意 : 一些作者之所以选择像 jitpack.io这样的存储库选项,很大程度上是因为它比其他人更快、更容易。但你应该意识到这一点。梅利克斯从级别 总结了所关注的问题与 jitpack.io。由于潜在的安全问题,我建议在添加之前咨询团队和安全专家。
  3. 好了,现在该是担心的时候了。很有可能您正在使用某个已经废弃或不再维护的库。查找库的 github 页面,并查看 author 是否在自述文件中声明它已被弃用或不再维护。你甚至可以查看最后一次提交是什么时候。如果这是一段时间以前,这意味着它不再维护和作者不关心从 jcenter()到任何其他回购库。

    • 转到 GitHub 的回购问题。一定有人发布了关于从 jcenter移动的计划的问题。如果你幸运的话,有人甚至可能已经创建了 fork 并在其他地方托管了这个 fork。例如,我在一个项目中使用了 spanny,但作者没有移动它。GustavoRoss 在乎足够分叉和移动。
    • - 没人搬家吗?-那你有两个选择。
      1. 寻找一个替代的活动库,为您做同样的事情。当然,这是很费时间的,但是从已经过时的资源中移开也是一个好主意。
      2. 如果您没有时间集成新的库或者没有其他库存在,那么您可以成为 GitHub 项目的英雄,然后移动。
  4. 但是,嘿,我不记得在我的代码库中提到过库?这意味着,它是一个传递依赖(直接依赖的依赖)。再次检查,直接依赖的最新版本和希望新版本已经修复了这个问题。

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

  • 失败的生成日志中有答案。

Build log annotated screenshot

希望这个时候你已经可以开始构建了。如果没有,那么希望 jcenter很快回来,并开始计划远离它。

最后,在几个小时的头部撞击之后,问题解决了。在 android/build.gradle中,在 allprojects-> repositories的顶部添加以下内容。

它将在配置阶段从所有依赖项中删除 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 repos
}
}


希望对你有所帮助:)