242

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

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

それらのリポジトリを維持する責任は誰にありますか?

4

4 に答える 4

151

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

  • JCenter は、Java および Android OSS ライブラリ、パッケージ、およびコンポーネントの世界最大のリポジトリである Bintrayの Java リポジトリです。
  • 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 のダウンロード速度とディスク容量を犠牲にして、いつか実行できるようにする必要があることも確かにありません。詳細を読む: Maven インデックスは巨大です !

また、 Hacker News に関する非常に短い (1Q と 1A) ディスカッションが興味深いと思われるかもしれません。


私はbintrayの背後にある会社であるに所属しています。詳細とリンクについては、私のプロフィールを参照してください。

于 2015-02-11T15:19:43.780 に答える
61

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

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

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

于 2014-07-23T12:14:08.360 に答える
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 Open Sourceは無料で、Maven、Gradle、SBT、Ivy などで使用される Maven リポジトリをサポートし、NuGet、NPM、RubyGems もサポートしています。

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

于 2015-02-09T18:10:02.417 に答える
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() の代わりに。

于 2015-08-12T07:42:27.527 に答える