上次我使用 Android Studio 时,它使用buildscript 存储库生成.gradle
文件,而现在有.mavencentral()
jcenter()
谁能解释与此相关的问题。还有其他回购吗?我们什么时候应该切换它们?它们对项目、模块、库有什么影响?Android 开发人员还有其他必需品吗?
谁负责维护这些回购?
上次我使用 Android Studio 时,它使用buildscript 存储库生成.gradle
文件,而现在有.mavencentral()
jcenter()
谁能解释与此相关的问题。还有其他回购吗?我们什么时候应该切换它们?它们对项目、模块、库有什么影响?Android 开发人员还有其他必需品吗?
谁负责维护这些回购?
在 Bintray,我刚刚转发了一篇非常详细的博客文章,描述了谷歌做出这一改变的原因。以下是最重要的几点:
jcenter()
是 的超集mavenCentral()
,包含许多额外的存储库和工件。关于性能改进,一些 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)的讨论很有趣。
我在Bintray和artifactory背后的公司JFrog工作,有关详细信息和链接,请参阅我的个人资料。
我也想知道,我没有明确的答案,但认为值得分享我所学到的(很少)。我在 Google Code 上的一个问题中发现了从 Maven Central 到 JCenter 的迁移,但没有发现有关具体何时发生的详细信息 - 在 Android Studio 的最近更改列表中找不到提及。
通过阅读 JCenter,它是 Bintray 背后的存储库,来自 JFrog 公司(我以前遇到过,我猜这就是“J”的来源)。根据 Bintray 博客,Bintray 是 Maven Central 的超集,所以如果这是真的,那么缺少依赖项不应该有问题,但我想这将取决于你在项目中使用的确切内容——你总是可以直接检查回购,因为两者都有很好的易于搜索的网站。因此,据我所知,对于谁维护这些存储库,依赖项的生产者将其依赖项添加到每个存储库中,而由存储库所有者负责维护服务。
就何时切换而言,很难解决。我认为 AOSP 仍在使用 Maven Central(通过查看 Templates for New Android Application),但该模板也仍在使用非常旧的 Gradle 版本(0.4)。有一些关于其他人与 jcenter 的依赖关系存在问题的问题,但报告的并不多,而且 Google 可能会在发布 AS final 之前再次切换到其他一些 repo。如果 Maven Central 现在仍然可以正常工作,那么您可以推迟切换,特别是如果您正在构建大型商业解决方案。
无论 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 支持。
免责声明:我是 Sonatype 的 Repository Management with Nexus 和 Nexus 培训师的作者,免费 Central Repository 的赞助商,Android Maven 插件的项目负责人,并通过从 AOSP 重建将一些 Android 库推送到 Central。
http://inthecheesefactory.com/blog/how-to-upload-library-to-jcenter-maven-central-as-dependency/en
这篇文章可以回答你的问题。
起初,Android Studio 选择 Maven Central 作为默认存储库。从旧版本的 Android Studio 创建新项目后,mavenCentral() 将在 build.gradle 中自动定义。
但 Maven Central 的最大问题是它对开发人员不友好。将库上传到其中非常困难。为了能够做到这一点,开发人员必须达到某种程度的极客。出于安全考虑等原因,Android Studio 团队决定将默认存储库切换到 jcenter,因为您可以看到,一旦您从最新版本的 Android Studio 创建新项目,jcenter() 将被自动定义而不是 mavenCentral()。