当前位置: 首页 > 知识库问答 >
问题:

Android构建脚本存储库:jcenter VS mavencentral

颜德馨
2023-03-14

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

有人能解释一下与此相关的问题吗?还有其他回购吗?我们应该什么时候换?它们对项目、模块、库有什么影响?Android开发者还有其他必需品吗?

谁负责维护这些回购协议?

共有3个答案

祁正浩
2023-03-14

无论构建中的默认值是什么。gradle文件-在基于团队的开发工作中,您应该真正使用存储库管理器,如Sonatype Nexus或JFrog Artifactory,而不是直接引用那些上游存储库。

这将允许您节省大量带宽,将两者和许多其他存储库结合起来,并在您自己的网络中管理它们。

在Maven Central vs JCenter方面。JCenter是JFrog拥抱、扩展(和消灭?)的努力马文中心。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和其他人使用的Maven存储库,以及NuGet、NPM和RubyGems支持。

免责声明:我是Nexus和Nexus trainer for Sonatype《存储库管理》一书的作者,Nexus trainer for Sonatype是免费中央存储库的发起人,也是Android Maven插件的项目负责人,并通过从AOSP重建将一些Android库推送到了中央。

花阳秋
2023-03-14

我也在想同样的问题,我没有明确的答案,但我想分享我学到的(一点点)东西可能是值得的。我在谷歌代码的一个问题中发现了从Maven Central到JCenter的转移,但没有发现确切的时间细节——在Android Studio最近的更改列表中找不到提及。

通过阅读JCenter,它是Bintray后面的html" target="_blank">存储库,来自JFrog公司(我以前见过他,我想这就是“J”的来源)。根据Bintray博客,Bintray是Maven Central的超集,因此如果这是真的,那么不应该存在缺少依赖项的问题,但我想这将取决于您在项目中使用的内容-您可以直接检查repo,因为两者都有很好的易于搜索的网站。因此,就我所知,对于维护这些repo的人来说,依赖项的生产者将其依赖项添加到每个repo中,而维护服务则取决于repo所有者。

就何时切换而言,很难确定。我认为AOSP仍然使用Maven Central(从新Android应用程序的模板中查找),但该模板也仍然使用非常古老的Gradle版本(0.4)。有几个问题是关于其他人与jcenter的依赖关系有问题,但没有太多报道,谷歌可能会在发布AS最终版本之前再次切换到其他回购。如果Maven Central目前仍在为您工作,您可以将切换推迟到那时,尤其是如果您正在构建大型商业解决方案。

宋英杰
2023-03-14

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

  • JCenter是Bintray中的一个Java库,它是世界上最大的Java和Android OSS库、包和组件的回购库。
  • 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检查,它检查依赖项是否是最新的,并且对少量工件的搜索几乎是即时的。

简而言之,我们真的不需要缓存;它可能有助于在中完成代码。格雷德尔和马文。pom文件,但这不是一个非常重要的用例,当然也不是所有用户都应该牺牲1.5G的下载速度和磁盘空间才能有一天这样做的可能性。阅读更多:Maven索引是巨大的!

此外,您可能会发现这篇关于黑客新闻的简短(1Q和1A)讨论很有趣。

我是bintray和artifactory背后的JFrog公司的员工,详情和链接请参见我的个人资料

 类似资料:
  • 问题内容: 我想创建本地Maven存储库。我做了以下步骤: 在中安装了Maven插件 在apache服务器中创建了一个文件夹localrepository,可使用访问 在我的项目中,我提供了 但这并没有解决上的jar 是否需要提供存储库? 问题答案: 使用具有默认配置的Web服务器来设置简单的存储库。关键是目录结构。该文档没有明确提及它,但其结构与本地存储库相同。 要建立一个内部存储库,只需要您有

  • 我对詹金斯是新的,想建立一个CI-环境。我有一个本地存储库,其中包含由Ant构建的文件。 当我手动启动构建时,我会得到以下错误: 在工作区C:\ProgramData\Jenkins\workspace\ToolChainXQT中构建 C:\Git\git-cmd.exe rev-parse--is-inside-work-tree#timeout=10从远程Git存储库获取更改C:\Git\gi

  • Gradle 的构建脚本展示了 Groovy 的所有能力. 作为开胃菜, 来看看这个: 例子 6.4. 在 Gradle 任务里使用 Groovy build.gradle task upper << { String someString = 'mY_nAmE' println "Original: " + someString println "Upper case:

  • 主要内容:Gradle如何使用Groovy,Groovy的JDK方法,以下是纠正/补充内容:Gradle构建脚本文件用来处理两件事情:一个是项目和另一个的任务。每个生成表示一个或多个项目。一个项目表示一个JAR库或Web应用程序,也可能表示由其他项目产生的JAR文件组装的ZIP。简单地说,一个项目是由不同的任务组成。一个任务是指构建执行的一块工作。任务可能是编译一些类,创建一个,产生的或发布一些归档文件库。 注:Gradle使用Groovy语言编写脚本。 Gradle提供了一个域特定语言

  • 当 Gradle 执行一个脚本时,它会将这个脚本编译为实现了 Script 的类. 也就是说所有的属性和方法都是在 Script 接口中声明的,由于你的脚本实现了 Script 接口,所以你可以在自己的脚本中使用它们.

  • 这一章主要讲解以下内容 Projects 和 tasks Hello world 快捷的任务定义 构建脚本代码 任务依赖 动态任务 使用已经存在的任务 快捷注释 附加的 task 属性 使用 Ant 任务 使用方法 默认的任务 通过 DAG 配置