我上一次使用Android Studio时,它生成.gradle
带有mavencentral()
buildscript存储库的文件,而现在有了jcenter()
。
任何人都可以解释与此有关的问题。还有其他回购吗?我们什么时候应该切换它们?它们对项目,模块,库有什么影响?Android开发人员还有其他必需品吗?
谁负责维护这些存储库?
我上一次使用Android Studio时,它生成.gradle
带有mavencentral()
buildscript存储库的文件,而现在有了jcenter()
。
任何人都可以解释与此有关的问题。还有其他回购吗?我们什么时候应该切换它们?它们对项目,模块,库有什么影响?Android开发人员还有其他必需品吗?
谁负责维护这些存储库?
Answers:
在Bintray,我只是重新整理了一篇非常详细的博客文章,描述了Google进行此更改的原因。以下是最重要的几点:
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)讨论。
我一直在想同样的事情,我没有确切的答案,但认为值得分享我学到的(一点)。我发现在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现在仍然适合您,则可以在此之前推迟切换,尤其是在构建大型商业解决方案时。
不管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。
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()。