Android buildscriptリポジトリ:jcenter VS mavencentral


239

前回Android Studioを使用したときは.gradlemavencentral()ビルドスクリプトリポジトリでファイルを生成していましたが、現在はjcenter()です。

誰もがこれに関連する問題を説明できますか?他にレポはありますか?いつ切り替える必要がありますか?プロジェクト、モジュール、ライブラリにどのような影響がありますか?Android開発者にとって他に必要なものはありますか?

これらのリポジトリを維持する責任があるのは誰ですか?


6
@sgillが述べたように、JFrogはBintrayとJCenterのメンテナーです。特定の質問がある場合は、離れて発射してください:)
JBaruch 14

なぜなら... Android。;)
Joshua Pinter 2015年

回答:


150

Bintrayで Googleがこの変更を加えた理由を説明する非常に詳細なブログ投稿ブログに書き直しまし。最も重要なポイントは次のとおりです。

  • JCenterはBintrayのJavaリポジトリであり、JavaおよびAndroid OSSライブラリ、パッケージ、コンポーネントの世界最大のリポジトリです。
  • JCenterのすべてのコンテンツは、安全なHTTPS接続を使用してCDN経由で提供されます。移行時(Android Studio 0.8)に戻ります。中央のMaven 2リポジトリはHTTPのみで、HTTPSはサポートされていませんでした。参照:51.6.2。Maven中央リポジトリ
  • jcenter()のスーパーセットでありmavenCentral()、多くの追加のリポジトリとアーティファクトが含まれます。
  • さまざまなシナリオで、さまざまな国のBintrayは、Maven Centralよりも高速です(イスラエルなど)。他では非常に近いです。Maven CentralとBintrayは、適応的にリージョンを優先する異なるCDNを使用するため、これは両方の方法に変わる可能性があります。
  • Bintrayは、従来のMaven Centralとは異なるパッケージ識別方法を備えています。これは大きくて深刻なセキュリティ問題です。大事です。
  • パッケージを(レガシーツールをサポートするために)Maven Centralに取得する必要がある場合は、Bintrayから、ボタンをクリックするだけで、または自動的に行うこともできます

パフォーマンスの改善に関して、Android開発者の支持者の2人が、Maven Centralでの巨大なインデックス作成の問題に直面/気付きました。

Tor Norbyeの言葉で:

私は真新しい設定ディレクトリでAndroidStudioを実行したので、Maven Centralに接続して、利用可能なアーティファクトのインデックスをダウンロードしました。

次に、たまたまディレクトリのサイズを確認しました。

私の〜/ Library / Cache / AndroidStudioPreviewは1.5Gで、そのうちの1.2Gは「Maven」サブディレクトリによって取得されています。

それはばかげています。インデックスはほとんど使用しません。その主な用途は、プロジェクト構造ダイアログの依存関係エディターですが、事前に計算されたインデックスを用意する必要はありません。MavenCentralには、誰かがアーティファクトを検索するときにオンデマンドで使用できる高速のオンラインJSON検索があります。でhttps://android-review.googlesource.com/#/c/94843/私たちは、依存関係が最新である、とアーティファクトの一握りの検索がインスタント近くにあるかどうかをチェックしリントチェックを追加しました。

つまり、キャッシュは実際には必要ありません。.gradleおよびmaven .pomファイルでのコード補完に役立つ可能性がありますが、これは非常に重要なユースケースではなく、1日で実行できるようにすべてのユーザーが1.5Gのダウンロード速度とディスク容量を犠牲にする必要があるわけではありません。続きを読む:Mavenインデックスは巨大です!

また、Hacker Newsに関するこの非常に短い(1Qおよび1A)ディスカッションは興味深いかもしれません。


私はと思いJFrog、会社の後ろ そして 参照してください私のプロフィール詳細とリンクについてを。


60

私は同じことを考えていましたが、明確な答えはありませんが、私が学んだこと(少し)を共有する価値があると考えました。Maven CentralからJCenterへの移行についての言及をGoogle Codeの1つの問題の中で見つけましたが、これがいつ起こったのかについての詳細はわかりませんでした-Android Studioの最近の変更リストで言及を見つけることができませんでした。

JCenterを読んでみると、これはBintrayの背後にあるリポジトリで、JFrogという会社(以前に出会ったことがあり、「J」の出所だと思います)のリポジトリです。Bintrayブログによると、Bintray はMaven Centralのスーパーセットであるため、依存関係が欠落しているという問題は発生しないはずですが、プロジェクトで使用しているものに正確に依存していると思います。両方とも簡単に検索できる素晴らしいウェブサイトを持っているので、リポジトリをチェックしてください。したがって、誰がこれらのリポジトリを維持するかについては、私が知っているように、依存関係を各リポジトリに追加するのは依存関係のプロデューサー次第であり、サービスを維持するのはリポジトリ所有者次第です。

いつ切り替えるかという点では、うまくいくのは難しいです。AOSPはまだ(新しいAndroidアプリケーションのテンプレートを調べて)Maven Centralを使用しているようですが、そのテンプレートも非常に古いGradleバージョン(0.4)を使用しています。jcenterからの依存関係に問題がある他の人についていくつかの問題がありますが、実際にはあまり報告されていません。GoogleがAS finalをリリースする前に、他のリポジトリに再度切り替える可能性があります。Maven Centralがまだ問題なく機能している場合は、特に大規模な商用ソリューションを構築している場合は、それまでは切り替えを保留できます。


5
:Mavenのセントラル、JCenter、およびその他を含む-あなたもここのGradleサポートリポジトリのリストを見つけることができますgradle.org/docs/current/userguide/...
SGill

11
リポジトリに関するGradleのドキュメントでは、Mavenリポジトリはhttpトランスポートプロトコルのみをサポートし、JCenterはhttpsをサポートしていると述べています。グーグルはhttpsの大ファンなので、おそらくそれが彼らの切り替えの理由ですか?
Rob Meeuwisse 2014年

2
ただの更新-Android StudioのRC2の時点では、それはまだJCenterなので、すべての依存関係が使用可能であることを確認した後、Android Studioが最終的になるとすぐに切り替えるのが良いと思います...
SGill

5
Central Repository / Maven Centralはhttpsをサポートしています。
Manfred Moser、

2
2015年2月の更新:AS 1.1 RC 1、buildscript / repositoriesでのjcenter()
Jose_GD

26

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オープンソースは無料で、Maven、Gradle、SBT、Ivyなどで使用されるMavenリポジトリのサポートに加えて、NuGet、NPM、RubyGemsのサポートも備えています。

免責事項:私は、無料のCentral RepositoryのスポンサーであるSonatypeのNexusおよびNexusトレーナーによるリポジトリ管理の著者であり、Android Mavenプラグインのプロジェクトリーダーであり、AOSPから再構築することにより、いくつかのAndroidライブラリをCentralにプッシュしました。


3
JFrogエンジニアリングチームによると、中央リポジトリからアーティファクトを動的に要求します。私はそのプロキシを呼び出します..あなたがそれをあなた次第の何かにしたいなら。
Manfred Moser

4
たとえば、プログレッシブ組織のpomやandroid mavenプラグインなどの私のプロジェクトと、Centralにあるその他すべてのプロジェクトはすべてjcenterに表示されます。それらのどれもCentral以外のどこにも公開されていないため、そこから取得しました。そして、それで結構です。Jcenterは単なる別の配布プラットフォームです。
Manfred Moser


5
Hahah .. JCenterはCentralからのみダウンロードして、ユーザーに渡します。
Manfred Moser、

2
単純な「私はMaven Centralの背後にいる会社で働いている」で十分です。それはキャッチフレーズの署名ではありません。stackoverflow.com/help/behaviorは、「...回答への所属を開示する必要がある」と明言しています。
フロー

8

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()の代わりに。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.