Repositori buildscript Android: jcenter VS mavencentral

239

Terakhir kali saya menggunakan Android Studio, itu menghasilkan .gradlefile dengan mavencentral()repositori buildscript sedangkan sekarang ada jcenter().

Adakah yang bisa menjelaskan masalah yang terkait dengan ini. Apakah ada repo lain? Kapan kita harus mengubahnya? Apa dampaknya terhadap proyek, modul, lib? Adakah hal penting lainnya untuk pengembang Android?

Siapa yang bertanggung jawab memelihara repo-repo itu?

Yakub
sumber
6
Seperti @sgill sebutkan, JFrog adalah pengelola Bintray dan JCenter. Jika Anda memiliki pertanyaan spesifik,
lanjutkan
Karena .... Android. ;)
Joshua Pinter

Jawaban:

150

Di Bintray saya hanya me - reblog sebuah posting blog yang sangat rinci yang menjelaskan alasan mengapa Google melakukan perubahan ini. Inilah poin-poin terpenting:

  • JCenter adalah repositori Java di Bintray , yang merupakan repo terbesar di dunia untuk pustaka, paket, dan komponen OSS Java dan Android.
  • Semua konten di JCenter disajikan melalui CDN, dengan koneksi HTTPS yang aman. Kembali pada masa migrasi (Android Studio 0.8) Repositori pusat maven 2 hanya HTTP dan HTTPS tidak didukung. Referensi: 51.6.2. Repositori pusat Maven .
  • jcenter()adalah superset dari mavenCentral(), yang mencakup banyak repositori dan artefak tambahan.
  • Dalam berbagai skenario dan dari berbagai negara, Bintray lebih cepat daripada Maven Central (mis. Dari Israel). Di tempat lain sangat dekat. Karena Maven Central dan Bintray menggunakan CDN yang berbeda yang secara adaptif mendukung daerah, ini mungkin berubah menjadi dua arah.
  • Bintray memiliki pendekatan yang berbeda untuk identifikasi paket daripada warisan Maven Central. Ini masalah keamanan besar dan serius. Itu penting.
  • Jika Anda benar-benar perlu membawa paket Anda ke Maven Central (untuk mendukung perangkat lawas) Anda dapat melakukannya dari Bintray juga, dengan mengklik tombol atau bahkan secara otomatis .

Mengenai peningkatan kinerja, beberapa pendukung pengembang android telah menghadapi / memperhatikan masalah pengindeksan besar dengan pakar pusat.

Dalam kata-kata Tor Norbye :

Saya menjalankan AndroidStudio dengan direktori pengaturan yang benar-benar baru, jadi ia pergi dan menghubungkan pakar pusat dan mengunduh indeks artefak yang tersedia.

Lalu saya kebetulan melihat ukuran direktori saya.

My ~ / Library / Cache / AndroidStudioPreview adalah 1,5G, dan 1,2G diambil oleh subdirektori "Maven".

Itu konyol. Kami hampir tidak menggunakan indeks sama sekali. Penggunaan utama untuk itu adalah editor Ketergantungan dalam Dialog Struktur Proyek, tetapi kita benar-benar tidak perlu memiliki indeks yang sudah diperhitungkan untuk itu. MavenCentral memiliki pencarian JSON online cepat yang dapat kita gunakan sesuai permintaan ketika seseorang mencari artefak. Dalam https://android-review.googlesource.com/#/c/94843/ kami menambahkan pemeriksaan serat yang memeriksa apakah dependensi terbaru, dan pencarian beberapa artefak sudah dekat.

Singkatnya, kita benar-benar tidak perlu cache; mungkin membantu dengan penyelesaian kode dalam file .gradle dan maven .pom, tapi itu bukan usecase yang super penting, dan tentu saja bukan sesuatu yang harus dikorbankan oleh semua pengguna dengan kecepatan pengunduhan 1.5G dan ruang disk untuk mendapatkan kemungkinan melakukan sesuatu di hari yang lain. Baca lebih lanjut tentang: Indeks Maven sangat besar !

Juga, Anda mungkin menemukan diskusi yang sangat singkat (1Q dan 1A) tentang Hacker News ini menarik.


Saya dengan JFrog , perusahaan di belakang dan , lihat profil saya untuk detail dan tautan.

JBaruch
sumber
60

Saya bertanya-tanya sama, dan saya tidak memiliki jawaban yang pasti tetapi saya pikir mungkin ada baiknya membagikan apa (sedikit) yang telah saya pelajari. Saya menemukan penyebutan perpindahan dari Maven Central ke JCenter dalam satu masalah di Google Code , tetapi tidak menemukan detail tentang kapan tepatnya ini terjadi - tidak dapat menemukan penyebutan dalam daftar perubahan terbaru untuk Android Studio.

Dari membaca di JCenter, itu adalah repositori di belakang Bintray, dari perusahaan JFrog (yang pernah saya temui sebelumnya, dan saya kira dari situlah 'J' berasal). Menurut blog Bintray, Bintray adalah superset dari Maven Central , jadi jika itu benar seharusnya tidak ada masalah dengan dependensi yang hilang, tapi saya kira itu akan tergantung pada apa yang Anda gunakan dalam proyek Anda - Anda selalu dapat langsung periksa repo karena keduanya memiliki situs web yang mudah dicari. Jadi bagi siapa yang mengelola repo ini, seperti yang saya tahu, tergantung pada produsen dependensi untuk menambahkan dependensi mereka ke setiap repo, dan hingga pemilik repo hanya untuk mempertahankan layanan.

Dalam hal kapan harus beralih sulit untuk bekerja. AOSP masih menggunakan Maven Central saya pikir (dari mencari di Templat untuk Aplikasi Android Baru), tetapi kemudian template itu juga masih menggunakan versi Gradle yang sangat lama (0,4) juga. Ada beberapa masalah tentang orang lain yang memiliki masalah dengan dependensi dari jcenter, tetapi tidak banyak yang dilaporkan, dan ada kemungkinan bahwa Google akan beralih lagi ke beberapa repo lain sebelum merilis final AS. Jika Maven Central masih bekerja dengan baik untuk Anda untuk saat ini, Anda dapat menunda peralihan hingga saat itu terutama jika Anda sedang membangun solusi komersial besar.

SGill
sumber
5
Anda juga dapat menemukan daftar repositori yang didukung gradle di sini - termasuk Maven Central, JCenter, dan lainnya: gradle.org/docs/current/userguide/…
SGill
11
Dalam dokumentasi Gradle tentang repositori dikatakan bahwa repo Maven hanya mendukung protokol transport http, sementara JCenter mendukung https. Google adalah penggemar berat https, jadi mungkin itu alasan mereka untuk beralih?
Rob Meeuwisse
2
Hanya pembaruan - per RC2 dari Android Studio, itu masih JCenter, jadi saya pikir waktu yang baik untuk beralih bisa segera, ketika Android Studio menjadi final, setelah memeriksa semua dependensi Anda tersedia ....
SGill
5
Central Repository / Maven Central mendukung https.
Manfred Moser
2
Pembaruan Feb 2015: AS 1.1 RC 1, still jcenter () dalam buildscript / repositori
Jose_GD
26

Tidak peduli apa defaultnya di file build.gradle - dalam upaya pengembangan berbasis tim Anda harus benar-benar menggunakan manajer repositori seperti Sonatype Nexus atau JFrog Artifactory dan tidak mereferensikan repositori upstream tersebut secara langsung.

Ini akan memungkinkan Anda untuk menghemat banyak bandwidth, menggabungkan keduanya dan banyak repositori lainnya dan mengatur semuanya di jaringan Anda sendiri.

Dalam hal Maven Central vs JCenter. JCenter adalah upaya dari JFrog untuk merangkul, memperluas (dan memusnahkan?) Maven Central. Maven Central adalah repositori default di Maven, SBT dan lainnya, sementara Gradle telah beralih ke JCenter. Ini tidak mengherankan mengingat bahwa JFrog dan Gradleware bekerja bersama sebagai perusahaan. Karena Android SDK menggunakan Gradle sebagai sistem bangun sekarang, pindah ke JCenter adalah langkah logis berikutnya.

JCenter sendiri adalah lapisan tipis di atas Maven Central. Proksi itu (kurang lebih berhasil) dan menambahkan komponen tambahan. Keduanya di-host di jaringan CDN dan berkinerja tinggi. Maven Central sendiri adalah target untuk semua Eclipse, Apache, dan sebagian besar proyek open source lainnya dan tanpanya JCenter sebagian besar akan kosong.

Menggunakan salah satu dari mereka akan bekerja dengan baik, tetapi saya akan menyarankan untuk langsung pergi ke sumber di mana Anda dapat dan di atasnya mengambil kendali dengan menggunakan manajer repositori. Nexus Open Source misalnya gratis dan memiliki dukungan untuk repositori Maven seperti yang digunakan oleh Maven, Gradle, SBT, Ivy, dan lainnya serta dukungan NuGet, NPM, dan RubyGems.

Penafian: Saya penulis Manajemen Repositori bersama Nexus dan pelatih Nexus untuk Sonatype, sponsor Repositori Tengah gratis, pimpinan proyek dari Plugin Android Maven dan telah mendorong beberapa perpustakaan Android ke Central dengan membangun kembali dari AOSP.

Manfred Moser
sumber
3
Menurut tim teknik JFrog, ia secara dinamis meminta artefak dari repositori Central. Saya akan memanggil proxy itu .. jika Anda ingin menyebutnya sesuatu yang lain terserah Anda.
Manfred Moser
4
Misalnya proyek saya seperti pom organisasi progresif atau plugin android maven dan semua yang ada di Central semua muncul di jcenter. Tak satu pun dari mereka diterbitkan di tempat lain selain Central sehingga Anda telah mengambilnya dari sana. Dan itu baik-baik saja. Jcenter hanyalah platform distribusi lain.
Manfred Moser
5
Hahah .. JCenter hanya mengunduh dari Central dan kemudian meneruskan ke pengguna.
Manfred Moser
2
Sederhana "Saya bekerja untuk perusahaan di belakang Maven Central" sudah cukup. Itu bukan tanda tangan dari tagline. stackoverflow.com/help/behavior dengan jelas menyatakan bahwa "... Anda harus mengungkapkan afiliasi Anda dalam jawaban Anda."
Aliran
8

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

artikel ini dapat menjawab pertanyaan Anda.

Pada awalnya, Android Studio memilih Maven Central sebagai repositori default. Setelah Anda membuat proyek baru dari Android Studio versi lama, mavenCentral () akan secara otomatis didefinisikan dalam build.gradle.

Namun masalah besar dari Maven Central adalah tidak ramahnya pengembang. Secara mengejutkan sulit untuk mengunggah perpustakaan. Untuk dapat melakukannya, pengembang harus berada pada tingkat tertentu. Dan dengan beberapa alasan misalnya masalah keamanan dan lain-lain, tim Android Studio memutuskan untuk mengalihkan repositori default ke jcenter sebagai gantinya karena Anda dapat melihat bahwa begitu Anda membuat proyek baru dari versi terbaru Android Studio, jcenter () akan secara otomatis ditentukan bukannya mavenCentral ().

taotao
sumber