JCenter永久关闭了吗(10月31日)?
> 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
我正试图建立一个安卓应用程序,但我得到了上述错误。当我连接到 "https://jcenter.bintray.com/com/google/http-client/google-http-client-android/maven-metadata.xml "时,出现了nginx 403错误。是JCenter宕机了吗?我应该怎么做?
gradle --offline build
- Roy Hinkley 2022-10-31
更新时间:2022年11月8日
又发生了一起事件。在此关注该事件。
tldr;
是的。jcenter
现在已经停机了。但有一个办法可以解决这个问题。jcenter
在不久前被淘汰了,仍然以只读模式提供。到目前为止,还没有关于它何时能再次使用的更新。根据你的情况,有快速或不那么快速的选择给你。
我在哪里可以查到状态?
更新:这里报告了新的事件。看看这个。
正如@Adrian在评论中提到的,你可以在Gradle的事件状态页面上查看当前事件的状态。更新:状态显示为"已解决",但我还是不能做这个项目。所以我想知道该状态页是否只显示了jcenter
对Gradle Plugin Portal的影响,而不是jcenter
的一般状态。
到目前为止,我没有找到任何地方可以报告bintray的状态了。如果你找到了,请在下面评论。
我现在能做什么呢?
建议的更新:
现在,通过更新gradlePluginPortal作为jcenter镜像,事件已经解决了(几乎是),在jcenter()
之前添加以下软件库应该可以解决这个问题。
google()
mavenCentral()
gradlePluginPortal()
暂时性的解决方案:
如下图所示,切换gradle的离线模式。这在本地机器上是可行的,但在CI上是不可行的。
稳健的解决方案:
摆脱废弃的服务总是一个好主意。大多数活跃的库现在都托管在其他流行的仓库,如google repo、Maven Central或gradle plugin repo。
要在你的项目中添加这些存储库,在存储库块中添加以下内容(你可能已经有了这些存储库)。顺序很重要。确保把它们放在jcenter()
之前,这告诉gradle在尝试从jcenter()
拉取之前,先查看其他仓库。
提示。对jcenter()
进行全局搜索,确保每个包含jcenter()
的版本库区都有这些其他的版本库。
repositories {
...
google()
mavenCentral()
gradlePluginPortal()
jcenter()
...
}
做一下gradle sync和clean build,看看是否能成功。
这没有用吗?
不要担心(尚未)。这很常见。上述解决方案在某些情况下不会单独起作用。
当从
jcenter()
移到其他 repo(如mavenCentral()
)时,作者决定更新版本号。这只是意味着你需要更新该依赖的版本,以便从其他 repo 中获取它。寻找在失败的构建日志中显示为不可用的库。找到它的github或开发文档来检查最新版本。Gradle Sync + clean build。我们刚刚添加的库是流行的,但不是唯一的。当库的作者不得不从
jcenter
切换到其他地方时,他们并没有选择其中的一个。在这种情况下,请查看github页面或开发者文档。通常作者会把所需的软件库放在这些页面上。如果你发现你的项目中没有这个仓库,请添加它。Gradle Sync + Clean build。- 注意:一些作者选择
jitpack.io
之类的存储库选项主要是因为它比其他选项更快更容易。但是您应该意识到对此的担忧。 Melix 来自 gradle 总结了对 jitpack.io 的担忧。由于潜在的安全问题,我建议在添加之前咨询团队和安全专家。
- 注意:一些作者选择
好了,现在是时候担心一下了。很有可能你使用的是一些已经废弃或不再维护的库。找到该库的github页面,看看作者是否在readme中声明它已经废弃或不再维护了。你甚至可以检查它最后一次提交的时间。如果是不久前,这意味着它不再被维护了,而且作者并不关心把库从
jcenter()
移到任何其他 repo。- 转到GitHub上的Repo问题。一定有人发布了关于从
jcenter
迁移的计划的问题。如果你运气好的话,可能有人甚至已经创建了分叉,并将该分叉托管在其他地方。例如,我在一个项目中使用了spanny
,而作者并没有移动它。GustavoRoss非常关心分叉和移动。 - 没有人分叉和移动? 那么你有两个选择。
- 寻找一个替代的活动库,为你做同样的事情。当然,这很费时间,但这也是一个远离废弃资源的好主意。
- 如果你没有时间整合新的库,或者没有其他库存在,那就做个英雄,把GitHub项目做成分叉,然后转移。
- 转到GitHub上的Repo问题。一定有人发布了关于从
但是,我不记得在我的代码库中放了相关的库?这意味着,它是一个过渡性的依赖(你的直接依赖的依赖)。再次检查,你的直接依赖的最新版本,希望新版本已经解决了这个问题。
如何检查直接依存关系和转折依存关系?
- 你的失败的构建日志有答案。
希望在这一点上,你的构建工作已经完成。如果没有,那么希望jcenter
能尽快回来,并开始计划远离它。
grep -rnw "jcenter" * > output-file. txt
- Lakston 2022-10-31
shell for FILE in `find . |grep build.gradle`; do echo $FILE; cat $FILE |grep jcenter; done
来源:github相关问题
- louiechristie 2022-11-08
最后经过几个小时的拍脑袋,问题解决了。在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
}
}
希望对您有所帮助 :)
是的,你并不孤单,Jcenter今天似乎倒下了。
我的解决方案是将所有的jCenter
改为mavenCentral
,从root/android/build.gradle
开始。
另外,别忘了库node_module/*error libaray*/android/build.gradle
。
我也刚刚遇到这个问题,我不太清楚为什么jcenter会返回403,但你可以通过在仓库设置中在jcenter()
之前添加mavenCentral()
来解决这个问题,像这样。
repositories {
...
mavenCentral() // add this line
jcenter()
...
}
我认为mavenCentral不是jcenter的完全替代品。
我用的是aliyun的镜像。把jcenter()
换成maven { url "https://maven.aliyun.com/repository/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" }
}
}