Android buildscript存储库:jcenter VS mavencentral

Jac*_*cob 232 java android maven-central android-gradle-plugin jcenter

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

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

谁负责维护这些回购?

JBa*_*uch 142

在Bintray,我刚刚重新发布了一篇非常详细的博客文章,描述了Google进行此项更改的原因.以下是最重要的一点:

  • JCenter是Bintray中的Java存储库,它是世界上最大的Java和Android OSS库,包和组件的repo.
  • JCenter中的所有内容都通过CDN提供,并具有安全的HTTPS连接.回到迁移时(Android Studio 0.8)中央maven 2存储库仅限HTTP,不支持HTTPS.参考:51.6.2.Maven中央存储库.
  • jcenter()是一个超集mavenCentral(),包含许多额外的存储库和工件.
  • 在不同的场景和不同的国家,Bintray比Maven Central(例如来自以色列)更快.在其他地方,它非常接近.由于Maven Central和Bintray使用不同的CDN,这些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,背后的公司和,请参阅我的个人资料以获取详细信息和链接.


SGi*_*ill 59

我想知道同样的事情,我没有明确的答案,但认为可能值得分享我学到的东西(很少).我发现在Google Code上的一个问题中提到了从Maven Central到JCenter的转移,但是没有发现有关这种情况究竟何时发生的详细信息 - 在最近的Android Studio更改列表中找不到提及.

从阅读JCenter开始,它就是Bintray背后的存储库,来自JFrog公司(我之前遇到过,我想这就是'J'来自的地方).根据Bintray的博客,Bintray是Maven Central的超集,所以如果这是真的,那么应该没有缺少依赖关系的问题,但我想这将取决于你在项目中使用的确切内容 - 你可以直接检查repos,因为它们都有很好的易于搜索的网站.因此,对于谁来维护这些回购,我知道,依赖项的生产者可以将它们的依赖项添加到每个仓库,而只需要维护服务的仓库所有者.

在何时切换它很难解决.我认为AOSP仍在使用Maven Central(从查看新Android应用程序的模板),但是那个模板也仍然使用非常古老的Gradle版本(0.4).有一些关于其他人遇到来自jcenter的依赖关系问题的问题,但实际上报道的并不多,并且Google可能会在发布AS final之前再次切换到其他一些repo.如果Maven Central现在仍然可以正常工作,那么你可以在此之前推迟转换,特别是如果你正在构建大型商业解决方案.

  • 在关于存储库的Gradle文档中,它说Maven repo仅支持http传输协议,而JCenter支持https.谷歌是https的忠实粉丝,所以也许这就是他们转换的原因? (11认同)
  • 您还可以在此处找到gradle支持的存储库列表 - 包括Maven Central,JCenter和其他:http://www.gradle.org/docs/current/userguide/dependency_management.html#sec:repositories (5认同)
  • Central Repository/Maven Central支持https就好了. (5认同)
  • 只是一个更新 - 从Android Studio的RC2开始,它仍然是JCenter,所以我认为在检查所有依赖项可用后,当Android Studio进入最终版时,切换的好时机很快就会出现.... (2认同)
  • 2015年2月更新:AS 1.1 RC 1,仍然是buildscript/repositories下的jcenter() (2认同)

Man*_*ser 24

无论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和Nexus培训师进行存储库管理的作者Sonatype,免费的Central Repository的赞助商,Android Maven插件的项目负责人,并通过从AOSP重建将一些Android库推送到Central.

  • 哈哈...... JCenter只从中心下载,然后传递给用户. (5认同)
  • 例如我的项目,如渐进式组织pom或android maven插件以及Central中的所有其他项目都出现在jcenter中.它们都没有在Central以外的任何地方发布,所以你从那里取出它们.那没关系.Jcenter只是另一个分销平台. (4认同)
  • 根据JFrog工程团队的说法,它可以动态地从中央存储库请求工件.我会打电话给那个代理..如果你想把它称之为别的东西. (3认同)
  • 例如https://bintray.com/bintray/jcenter/com.simpligility.maven%3Aprogressive-organization-pom/view或https://bintray.com/bintray/jcenter/com.simpligility.maven.plugins%3Aandroid-maven -plugin /视图 (2认同)
  • 一个简单的"我为Maven Central背后的公司工作"就足够了.这不是标语的签名.http://stackoverflow.com/help/behavior明确指出"......你必须在答案中披露你的联系." (2认同)

tao*_*tao 6

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

这篇文章可以回答你的问题.

At first, Android Studio chose Maven Central as a default repository. Once you create a new project from old version of Android Studio, mavenCentral() would be automatically defined in build.gradle.

But the big problem of Maven Central is it is not developer-friendly. It is surprisingly hard to upload the library to. To be able to do so, developer has to be at some level of geeky. And with some more reason for example a security concern and etc, Android Studio team decided to switch the default repository to jcenter instead as you can see that once you create a new project from latest version of Android Studio, jcenter() would be automatically defined instead of mavenCentral().