JCenter被废弃;对Gradle和安卓的影响

回答 10 浏览 4.7万 2021-03-16

我应该担心JCenter被弃用吗?

为什么要将我的库从JCenter迁移到其他Maven仓库?

我可以继续在我的Gradle构建脚本中使用jcenter()吗?

Mahozad 提问于2021-03-16
相关的。stackoverflow.com/q/66400264E_net4 the comment flagger 2021-03-16
10 个回答
#1楼
得票数 90

替换

jcenter()

与此有关。

mavenCentral()
Umar Ata 提问于2021-05-11
Peter Mortensen 修改于2021-07-29
注意,该库应在Maven中心仓库中可用。否则,简单地将jcenter()替换成mavenCentral()不会有任何作用。Mahozad 2021-05-11
@Mahozad 的确,在某些情况下,我们需要到开发者的网站上复制maven行,通常看起来像这样。maven {url 'https://my.library-url.com/'}cmak 2022-01-20
#2楼
得票数 31

请看新的答案

摘要:2022年2月1日之后,jcenter()将不再起作用。

根据这篇Gradle博客文章

Gradle 7.0 will deprecate the use of jcenter() to resolve dependencies.
You will still be able to use JCenter as a repository, but Gradle will emit a warning.
The jcenter() method will be removed in the next major release.

Gradle has no inherent tie to JCenter or Maven Central, so you can always switch to any other repository of your choice.

而根据安卓开发者的说法。

JFrog, the company that maintains the JCenter artifact repository used by many Android projects, recently announced the deprecation and upcoming retirement of JCenter.
According to the announcement, JCenter will allow downloads of existing artifacts until February 1, 2022.

Developers who publish artifacts on JCenter should start migrating packages to a new host, such as Maven Central.

因此,只需确保作者在其他仓库中提供他们的库,然后更新你的构建脚本,以便能够从这些仓库中下载。
例如,在Gradle中使用mavenCentral()函数,可以从Maven Central仓库中获取依赖项。

Mahozad 提问于2021-03-16
Mahozad 修改于2021-10-20
错。 "2021年5月1日,Bintray服务将不再可用。GoCenter和ChartCenter服务将不再对非Artifactory客户提供。(ConanCenter和JCenter不受影响)."和"更新4/27/2021。我们听取了社区的意见,并将JCenter无限期地保持为只读存储库。我们的客户和社区可以继续依赖JCenter作为Java包的可靠镜像。The incredible Jan 2021-07-19
#3楼 已采纳
得票数 28

JFrog网站中提到的这里的最新更新是:。

4/27/2021更新。我们听取了社区的意见,并将JCenter无限期地保持为只读资源库。我们的客户和社区可以继续依靠JCenter作为Java包的可靠镜像。

Pericles Karachristos 提问于2021-06-29
Peter Mortensen 修改于2021-07-29
JCenter本身可能会继续工作,但它会被废弃并从各种工具中移除,比如Gradle。所以实际上,大多数人需要停止使用它。Stan 2021-12-17
@Stan 如何停止?我正在使用Gradle的阴影插件,而且它只在jcenter上使用。Nhân Trần 2022-06-13
> jcenter()方法将在下一个主要版本中被删除 这仍然适用,对吗?它如何被取代?reducing activity 2022-06-19
最好的情况是--在maven或其他地方找到你的依赖项。最坏的情况是--它们只在jcenter上(而且项目不活跃),所以你必须自己移动它们/分叉它们/直接下载和源代码/等等。Stan 2022-08-09
#4楼
得票数 17

jcenter()替换为。

gradlePluginPortal()
mavenCentral()
user1373996 提问于2021-07-04
user1373996 修改于2021-10-07
目前,Gradle Plugin Portal隐含地反映了JCenter。如果你正在使用Plugin Portal(通过gradlePluginPortal()或URL plugins.gradle.org/m2)来解决你的应用程序的依赖关系,你可能正在依赖JCenter。你应该避免使用Plugin Portal作为仓库,除非是Gradle插件项目。blog.gradle.org/jcenter-shutdowntogikan 2021-07-23
@togikan 这绝对是gradle插件项目,因为它是android项目的默认项目。或者说,如果这个问题的主人使用了其他的东西,就不是了。user1373996 2021-07-24
"Gradle插件门户目前隐含地反映了JCenter"是否有一些信息,他们一定会在多长时间内做到这一点?reducing activity 2022-06-19
#5楼
得票数 6

你必须要改变

jcenter()

mavenCentral()

此外,你还必须设置一个或多个存储库的URL。

repositories {
    mavenCentral()
    maven {
        url = "https://repo1.maven.org/maven2/"
    }
    maven {
        url "https://repo.spring.io/release"
    }
    maven {
        url "https://repository.jboss.org/maven2"
    }
    maven {
        url 'https://repo.jenkins-ci.org/public/'
    }
}
N3tMaster 提问于2022-01-13
谢谢你。在其他许多答案之后,这个答案起作用了--可能是因为它有正确的镜像,有我的项目仍在使用的旧版本的依赖。我只想让它发挥作用。我不能升级所有东西...Mehmet Fatih Yıldız 2022-02-23
mavenCentral是否镜像了整个jcenter?reducing activity 2022-06-19
@reducing activity:是的,应该是这样的。N3tMaster 2022-06-20
@reducingactivity 不M D P 2022-11-02
#6楼
得票数 2

实际上,开发者应该把他们的库移植到Maven或Google。在这种情况下,可以从Gradle中删除jCenter()。

当旧的库不再被维护或开发人员退休时,就会出现一个问题。

只有两种可能性。

a) 在Maven中搜索类似的库。

b) 从GitHub上下载相应的源代码,并从中创建你自己的本地库。

截至2022-02-01,JCenter肯定已经倒下了。

guenter47 提问于2021-05-05
Peter Mortensen 修改于2021-07-29
你对选项B有什么建议吗?我为一个运行安卓系统的条码扫描器编程,我已经很确定制造商的开发人员会跟不上改变。Literate Corvette 2021-06-08
另一个答案与最后一段的陈述相矛盾。Peter Mortensen 2021-07-29
#7楼
得票数 1

在我的案例中,我已经按照这些步骤完成了它。

  1. 将mavenCentral()置于jcenter()之前。
  2. 使用Android Studio升级助手升级gradle(在我的例子中,升级到了7.0.3)。
  3. 通过插件(Android Studio)安装NDK(Side by Side)。
  4. Clean &重建项目
Ayoub EL ABOUSSI 提问于2022-01-20
#8楼
得票数 0

我什么都试过了,但都不奏效,后来用手添加了一个新的maven仓库,现在就可以用了。

repositories {
 // ...
 maven { url 'https://repo.gradle.org/gradle/libs-releases/' }
}
Bob 提问于2022-05-12
Mahozad 修改于2022-05-12
#9楼
得票数 0

现在什么都不能用了。我们可以暂时使用aliyun.com。

在顶层的build.gradle中这样使用它

buildscript {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        maven { url 'https://maven.aliyun.com/repository/apache-snapshots' }
    }
    dependencies {
        ***
    }
}

allprojects {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/central' }
        maven { url 'https://maven.aliyun.com/repository/google' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        maven { url 'https://maven.aliyun.com/repository/apache-snapshots' }
    }
}
M D P 提问于2022-11-02
#10楼
得票数 0

对于那些仍在寻找答案的人来说,我发现版本库的设置需要在构建脚本的顶部,否则变化不会被接受。

buildscript {
  repositories {
    mavenCentral()
  }
}

这对我来说是有效的。

Stuart McIntyre 提问于2022-11-16