web-dev-qa-db-ja.com

Androidビルドスクリプトリポジトリ:jcenter VS mavencentral

前回Android Studioを使用したときは、mavencentral() buildscriptリポジトリで.gradleファイルが生成されましたが、現在はjcenter()があります。

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

誰がそれらのリポジトリを管理する責任がありますか?

227
Jacob

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/ に、依存関係が最新であるかどうかをチェックするlintチェックが追加されました。瞬時に。

要するに、キャッシュは本当に必要ないのです。それは.gradleとmaven .pomファイルのコード補完を手助けするかもしれませんが、それは非常に重要なユースケースではありません、そして確かに何かすべてのユーザーがするべきではありません1.5Gのダウンロード速度とディスク容量を犠牲にして、1日で済む可能性があります。続きを読む: Mavenのインデックスは巨大です

また、あなたはこれを見つけるかもしれません ハッカーニュースに関する非常に短い(1Qと1A)の議論 興味深い。


私は JFrogbintray and artifactory の背後にいる会社です。詳細とリンクについては my profile を参照してください。

139
JBaruch

私は同じことを不思議に思っていました、そして私は決定的な答えを持っていませんが、それが私が学んだ(少し)何を共有する価値があるかもしれないと考えました。 Maven CentralからJCenterへの移行についての言及が見つかりました Google Codeの1つの問題の中で しかし、これがいつ起こったのかについての詳細は明らかにされていません - 。

JCenterで読んだことから、それはJFrog社からのBintrayの背後にあるリポジトリです(私は以前に出会った、そして私はそれが 'J'から来ていると思います)。 Bintrayのブログによると、 BintrayはMaven Centralのスーパーセットです ですので、もしそうであれば依存関係の欠如による問題はないはずですが、私はあなたが使っているものに正確に依存することになると思いますあなたのプロジェクト - どちらも素敵な検索可能なウェブサイトを持っているので、あなたはいつでも直接リポジトリをチェックすることができます。ですから、これらのレポジトリを管理するのは、私が知っている限りでは、各レポジトリに依存関係を追加するのは依存関係のプロデューサ次第で、サービスを維持するのはレポ所有者次第です。

いつ切り替えるかという点では、解決するのは困難です。 AOSPはまだ私が思うMaven Centralを使っています(新しいAndroidアプリケーション用のテンプレートを見ることから)、それからそのテンプレートもまだ非常に古いGradleバージョン(0.4)を使っています。 jcenterの依存関係に問題があるという人もいますが、あまり報告されていませんが、AS finalのリリース前にGoogleが他のリポジトリに切り替える可能性があります。 Maven Centralが今のところまだうまく機能している場合は、特に大規模な商用ソリューションを構築している場合は、それまでスイッチングを延期できます。

59
SGill

Build.gradleファイルのデフォルトに関係なく、チームベースの開発では、Sonatype NexusやJFrog Artifactoryのようなリポジトリマネージャを実際に使用し、それらのアップストリームリポジトリを直接参照しないでください。

これにより、多くの帯域幅を節約し、両方のリポジトリと他の多くのリポジトリを組み合わせて、すべて自分のネットワークで管理できます。

Maven CentralとJCenterの観点から。 JCenterは、Maven Centralを受け入れ、拡張し(そして駆除しますか?)JFrogの努力です。 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のNexusトレーナー、Android Maven PluginのプロジェクトリーダーのスポンサーであるRepository Managementの著者であり、AOSPからの再構築によっていくつかのAndroidライブラリをCentralにプッシュしました。

24
Manfred Moser

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

6
taotao