上次我使用 Android Studio 时,它生成了带有mavencentral()构建脚本仓库的.gradle文件,而现在有jcenter()。
mavencentral()
.gradle
jcenter()
有人能解释一下与此相关的问题吗?还有其他的仓库吗?我们什么时候替换它们,以及他们对项目、模块、库有什么影响? 对安卓开发者来说,还有什么其他要领?
谁负责维护这些仓库?
我也想知道,我没有明确的答案,但我想也许值得分享我学到的(一点点)。我发现提到了从Maven中心转移到JCenter 在谷歌代码的一个问题,但没有发现具体发生的细节-在Android Studio的最近更改列表中找不到提及。
通过阅读JCenter,它是Bintray背后的存储库,来自JFrog公司(我以前遇到过这家公司,我猜这就是'J'的来源)。根据Bintray博客,Bintray是Maven Central的一个超集,所以如果这是真的,不应该有丢失依赖关系的问题,但我猜这将取决于你在你的项目中使用什么-你总是可以直接检查回购,因为两者都有很好的易于搜索的网站。因此,对于维护这些回购的人来说,据我所知,取决于依赖关系的生产者将他们的依赖关系添加到每个回购中,而取决于回购所有者只是维护服务。
至于什么时候转换,很难算出来。我认为AOSP仍在使用Maven Central(从新Android应用程序模板中查找),但该模板也仍在使用非常旧的Gradle版本(0.4)。有一些关于其他jcenter的依赖关系的问题,但实际上并没有很多报道,谷歌可能会在发布AS final之前再次切换到其他一些回购。如果Maven中心目前仍然运行良好,那么您可以推迟切换,特别是如果您正在构建大型商业解决方案。
不管构建中的默认值是什么。gradle文件——在基于团队的开发工作中,你应该真正使用像Sonatype Nexus或JFrog Artifactory这样的存储库管理器,而不是直接引用那些上游存储库。
这将允许您节省大量带宽,将两者和许多其他存储库结合起来,并在您自己的网络中管理它们。
就Maven Central和JCenter而言。JCenter是JFrog致力于拥抱、扩展(和消灭?)Maven中央。Maven Central是Maven、SBT和其他工具的默认存储库,而Gradle已经切换到JCenter。考虑到JFrog和Gradleware作为公司一起工作,这并不奇怪。由于Android SDK现在使用Gradle作为构建系统,迁移到JCenter是顺理成例的下一步。
JCenter本身是Maven Central之上的一个薄板。它代理它(或多或少成功地)并添加额外的组件。两者都托管在CDN网络上,性能很高。Maven Central本身是所有Eclipse、Apache和大多数其他开源项目的目标,如果没有它,JCenter将基本上是空的。
使用它们中的任何一种都可以,但我建议直接访问您可以使用的源代码,并在此基础上使用存储库管理器来控制它。例如,Nexus开源是免费的,并且支持Maven、Gradle、SBT、Ivy和其他库以及NuGet、NPM和RubyGems支持。
免责声明:我是Nexus库管理的作者和Sonatype的Nexus培训师,免费中央存储库的发起人,Android Maven插件的项目负责人,并通过从AOSP重建一些Android库推到中央。
在Bintray,我刚刚重新写了一篇非常详细的博客文章,描述了谷歌做出这一改变的原因。以下是最重要的几点:
mavenCentral()
关于性能改进,一些android开发人员已经面临/注意到maven central的巨大索引问题。
用Tor Norbye的话来说:
我用一个全新的设置目录运行AndroidStudio,所以它连接了maven中心,下载了一个可用工件的索引。 然后我碰巧看到了我的目录的大小。 我的~/Library/Cache/AndroidStudioPreview是1.5G,其中1.2G被“Maven”子目录占用。 那太荒唐了。我们几乎不用指数。它的主要用途是项目结构对话框中的依赖项编辑器,但我们真的不需要为它预先计算索引。MavenCentral有一个快速的在线JSON搜索,当有人搜索工件时,我们可以按需使用。在https://android-review.googlesource.com/#/c/94843/中,我们添加了一个lint检查,它检查依赖项是否是最新的,并且对少量工件的搜索几乎是即时的。 简而言之,我们真的不需要缓存;它可能有助于在.gradle和maven .pom文件中完成代码,但这不是一个超级重要的用例,当然也不是所有用户应该牺牲1.5G的下载速度和磁盘空间来实现的事情。 阅读更多:Maven指数huge!
我用一个全新的设置目录运行AndroidStudio,所以它连接了maven中心,下载了一个可用工件的索引。
然后我碰巧看到了我的目录的大小。
我的~/Library/Cache/AndroidStudioPreview是1.5G,其中1.2G被“Maven”子目录占用。
那太荒唐了。我们几乎不用指数。它的主要用途是项目结构对话框中的依赖项编辑器,但我们真的不需要为它预先计算索引。MavenCentral有一个快速的在线JSON搜索,当有人搜索工件时,我们可以按需使用。在https://android-review.googlesource.com/#/c/94843/中,我们添加了一个lint检查,它检查依赖项是否是最新的,并且对少量工件的搜索几乎是即时的。
另外,你可能会发现黑客新闻上非常简短的讨论(1Q和1A)很有趣。
我与JFrog,背后的公司bintray和artifactory,见我的个人资料详细信息和链接。
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()。
起初,Android Studio选择Maven Central作为默认存储库。一旦你从旧版本的Android Studio创建了一个新项目,mavenCentral()将自动在build.gradle中定义。
但是Maven Central的一个大问题是它对开发人员不友好。将库上传到上面是非常困难的。要做到这一点,开发人员必须具备一定的极客水平。还有一些原因,例如安全问题等,Android Studio团队决定将默认的存储库切换到jcenter,因为你可以看到,一旦你从最新版本的Android Studio创建一个新项目,jcenter()将自动定义,而不是mavenCentral()。