Android buildscript存储库:jcenter VS mavencentral


239

我上一次使用Android Studio时,它生成.gradle带有mavencentral()buildscript存储库的文件,而现在有了jcenter()

任何人都可以解释与此有关的问题。还有其他回购吗?我们什么时候应该切换它们?它们对项目,模块,库有什么影响?Android开发人员还有其他必需品吗?

谁负责维护这些存储库?


6
正如@sgill所述,JFrog是Bintray和JCenter的维护者。如果您有任何特定问题,请开火:)
JBaruch 2014年

因为...。;)
约书亚·品特

Answers:


150

在Bintray,我只是重新整理了一篇非常详细的博客文章,描述了Google进行此更改的原因。以下是最重要的几点:

  • JCenter是Bintray中的Java存储库,它是Java和Android OSS库,程序包和组件的世界上最大的存储库。
  • JCenter中的所有内容都通过具有安全HTTPS连接的CDN提供。在迁移时(Android Studio 0.8),中央maven 2存储库仅是HTTP,不支持HTTPS。参考:51.6.2。Maven中央存储库
  • jcenter()是的超集mavenCentral(),其中包含许多其他存储库和工件。
  • 在不同的情况下和来自不同的国家/地区,Bintray的速度都比Maven Central(例如来自以色列)快。在其他情况下,它非常接近。由于Maven Central和Bintray使用不同的CDN来自适应地偏爱区域,因此这可能会改变为两种方式。
  • 与传统的Maven Central相比,Bintray具有不同的软件包识别方法。这是一个重大而严重的安全问题。这很重要。
  • 如果您确实需要将软件包下载到Maven Central(用于支持旧版工具),则也可以从Bintray进行处理,只需单击一个按钮,甚至自动进行

关于性能改进,几个Android开发人员的拥护者已经/意识到使用Maven Central进行巨大索引的问题。

Tor Norbye的话说:

我使用全新的设置目录运行AndroidStudio,因此将其连接到Maven Central,并下载了可用工件的索引。

然后我碰巧看了一下目录的大小。

我的〜/ Library / Cache / AndroidStudioPreview是1.5G,其中的1.2G是由“ Maven”子目录获取的。

这是荒谬的。我们几乎完全不使用索引。它的主要用途是“项目结构”对话框中的“依赖关系”编辑器,但是我们确实不需要为其预先准备索引。MavenCentral具有快速的在线JSON搜索,当有人搜索工件时,我们可以按需使用。在https://android-review.googlesource.com/#/c/94843/中,我们添加了一个lint检查,该检查可以检查依赖项是否是最新的,以及对少量工件的搜索几乎是即时的。

简而言之,我们真的不需要缓存。它可能有助于在.gradle和maven .pom文件中完成代码,但这不是一个非常重要的用例,当然也不是所有用户都必须牺牲1.5G的下载速度和磁盘空间才能有一天的工作。阅读更多内容:Maven索引巨大

此外,您可能会在Hacker News上进行非常简短的(1Q和1A)讨论


我和背后的公司JFrog,请参阅我的个人资料以获取详细信息和链接。


60

我一直在想同样的事情,我没有确切的答案,但认为值得分享我学到的(一点)。我发现在Google Code的一个问题中提到了从Maven Central到JCenter的转移,但是没有找到确切的发生时间的详细信息-在Android Studio的最新更改列表中找不到提及。

通过在JCenter上阅读,它是Bintray背后的存储库,来自JFrog公司(我以前见过,我想这就是J的来源)。根据Bintray博客的说法,Bintray是Maven Central的超集,因此,如果的确如此,那么就不会有缺少依赖项的问题,但是我想它将取决于您在项目中使用的内容-您始终可以直接检查存储库,因为它们都有易于搜索的不错的网站。因此,据我所知,对于谁来维护这些存储库,取决于依赖关系的生产者将其依赖关系添加到每个存储库中,而取决于存储库所有者只是为了维护服务。

就何时切换而言,很难解决。我认为AOSP仍在使用Maven Central(通过在“新Android应用程序的模板”中查看),但是该模板也仍在使用非常旧的Gradle版本(0.4)。关于其他人的问题与jcenter的依赖关系有关,但存在很多问题,但报道的次数并不多,而且Google可能会在发布AS final之前再次切换到其他仓库。如果Maven Central现在仍然适合您,则可以在此之前推迟切换,尤其是在构建大型商业解决方案时。


5
您还可以在此处找到受gradle支持的存储库列表-包括Maven Central,JCenter等:gradle.org/docs/current/userguide/…– SGill
2014年

11
在有关存储库的Gradle文档中,它说Maven存储库仅支持http传输协议,而JCenter支持https。Google是https的忠实拥护者,所以也许这是他们切换https的原因?
Rob Meeuwisse 2014年

2
只是一个更新-由于Android工作室的RC2的,它仍然JCenter,所以我认为一个好时机,开关可能很快,当Android的工作室去最后,检查后所有的依赖条件....
SGill

5
中央存储库/ Maven Central支持https就可以了。
曼弗雷德·摩泽

2
2015年2月更新:AS 1.1 RC 1,仍位于buildscript /存储库下的jcenter()
Jose_GD 2015年

26

不管build.gradle文件中的默认值是什么-在基于团队的开发工作中,您都应该真正使用诸如Sonatype Nexus或JFrog Artifactory之类的存储库管理器,而不要直接引用这些上游存储库。

这将使您节省大量带宽,将两个和许多其他存储库合并在一起,并在自己的网络中对其进行管理。

关于Maven Central与JCenter。JCenter是JFrog努力拥抱,扩展(和消除?)Maven Central的努力。Maven Central是Maven,SBT和其他版本中的默认存储库,而Gradle已切换到JCenter。考虑到JFrog和Gradleware作为公司一起工作,这不足为奇。由于Android SDK现在使用Gradle作为构建系统,因此迁移到JCenter是下一步的逻辑。

JCenter本身是Maven Central上的薄薄单板。它代理它(或多或少成功)并添加其他组件。两者都托管在CDN网络上并且性能很高。Maven Central本身是所有Eclipse,Apache和大多数其他开源项目的目标,如果没有它,JCenter几乎是空的。

使用它们中的任何一个都可以正常工作,但是我建议您直接去可能的地方,并在此之上使用存储库管理器来控制它。例如,Nexus Open Source是免费的,并支持Maven,Gradle,SBT,Ivy等使用的Maven存储库,以及对NuGet,NPM和RubyGems的支持。

免责声明:我是Nexus的存储库管理和Sonatype的Nexus培训者的作者,免费的Central Repository的赞助商,Android Maven插件的项目负责人,并通过从AOSP进行重建将一些Android库推向Central。


3
根据JFrog工程团队的说法,它确实从中央存储库动态请求工件。我想称呼那个代理..如果您想称呼它,那取决于您。
曼弗雷德·摩泽

4
例如,我的项目(例如渐进式组织pom或android maven插件)以及其他所有在Central中的项目都出现在jcenter中。除了Central以外,没有任何其他出版物可以发布,因此您已从那里获取了它们。那很好。Jcenter只是另一个发行平台。
曼弗雷德·摩泽


5
哈哈.. JCenter仅从Central下载,然后传递给用户。
Manfred Moser 2015年

2
一个简单的“我为Maven Central背后的公司工作”就足够了。那不是标语的签名。stackoverflow.com/help/behavior明确指出:“ ...您必须在回答中披露从属关系。”
流量

8

http://inthecheesefactory.com/blog/how-to-upload-library-to-jcenter-maven-central-as-dependency/en

本文可以回答您的问题。

首先,Android Studio选择了Maven Central作为默认存储库。从旧版本的Android Studio创建新项目后,将在build.gradle中自动定义mavenCentral()。

但是Maven Central的最大问题是它对开发人员不友好。很难将库上传到。为了做到这一点,开发人员必须处于某种怪异状态。出于其他原因(例如出于安全方面的考虑等),Android Studio团队决定将默认存储库改为jcenter,因为您可以看到,一旦从最新版本的Android Studio创建新项目,就会自动定义jcenter()而不是mavenCentral()。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.