Android buildscript repositories: jcenter VS mavencentral

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

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

谁负责维护这些存储库?


答案 1

在Bintray,我刚刚转发了一篇非常详细的博客文章,描述了谷歌做出这一改变的原因。以下是最重要的一点:

  • JCenter是Bintray中的Java存储库,Bintray是世界上最大的Java和Android OSS库,包和组件的存储库。
  • JCenter中的所有内容都通过CDN提供,并具有安全的HTTPS连接。早在迁移时(Android Studio 0.8),中央maven 2存储库仅是HTTP,不支持HTTPS。参考: 51.6.2.Maven Central Repository.
  • jcenter()是 的超集,它包含许多额外的储存库和工件。mavenCentral()
  • 在不同场景和来自不同国家/地区,Bintray比Maven Central(例如来自以色列)更快。在其他方面,它非常接近。由于Maven Central和Bintray使用不同的CDN,自适应地偏向区域,因此这可能会同时改变为两种方式。
  • Bintray的包裹识别方法与传统的Maven Central不同。这是一个重大而严重的安全问题。这很重要。
  • 如果你真的需要把你的软件包放到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合作,背后的公司,请参阅我的个人资料以获取详细信息和链接。


答案 2

我想知道同样的事情,我没有一个明确的答案,但认为可能值得分享我学到的(很少的)。我在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现在仍然正常工作,您可以推迟切换,直到那时,特别是如果您正在构建大型商业解决方案。


推荐