Android buildscript depoları: jcenter VS mavencentral


239

Android Studio'yu en son kullandığımda , şimdi buildscript havuzlarıyla .gradledosyalar mavencentral()üretti jcenter().

Herkes bununla ilgili sorunları açıklayabilir. Başka depo var mı? Ne zaman değiştirmeliyiz? Projeler, modüller, kütüphaneler üzerinde ne gibi etkileri var? Android geliştiricileri için başka herhangi bir gereklilik var mı?

Bu depoları korumaktan kim sorumlu?


6
@Sgill'in belirttiği gibi JFrog, Bintray ve JCenter'ın koruyuculardır. Herhangi bir sorunuz varsa,
kovun

Çünkü .... Android. ;)
Joshua Pinter

Yanıtlar:


150

Bintray'de , Google'ın bu değişikliği yapmasının nedenlerini açıklayan çok ayrıntılı bir blog gönderisini yeniden bloke ettim . İşte en önemli noktalar:

  • JCenter, Bintray'de Java ve Android OSS kütüphaneleri, paketleri ve bileşenleri için dünyanın en büyük deposu olan bir Java deposudur .
  • JCenter'daki tüm içerik güvenli bir HTTPS bağlantısı olan bir CDN üzerinden sunulur. Geçiş zamanında (Android Studio 0.8) Merkezi maven 2 deposu yalnızca HTTP'ydi ve HTTPS desteklenmiyordu. Referans: 51.6.2. Maven merkez deposu .
  • jcenter()mavenCentral()birçok ek havuzu ve yapay nesneyi kapsayan bir üst kümedir .
  • Farklı senaryolarda ve farklı ülkelerden Bintray Maven Central'dan (örneğin İsrail'den) daha hızlıdır. Diğerlerinde ise çok yakın. Maven Central ve Bintray, bölgeleri uyarlamalı olarak destekleyen farklı CDN'ler kullandığından, bu her iki yönde de değişebilir.
  • Bintray, paket tanımlama konusunda eski Maven Central'dan farklı bir yaklaşıma sahiptir. Bu büyük ve ciddi bir güvenlik meselesidir. Bu önemli.
  • Paketinizi gerçekten Maven Central'a (eski araçları desteklemek için) götürmeniz gerekiyorsa, Bintray'den , bir düğmeye tıklayarak veya hatta otomatik olarak yapabilirsiniz .

Performans geliştirmeleri ile ilgili olarak, birkaç android geliştirici savunucusu maven merkezi ile büyük endeksleme sorunuyla karşı karşıya kaldı / fark etti.

Tor Norbye'nin sözleriyle :

AndroidStudio'yu yepyeni bir ayarlar dizini ile çalıştırdım, bu yüzden gitti ve maven merkezini bağladı ve mevcut eserlerin bir dizinini indirdi.

Sonra dizinimin boyutuna baktım.

~ / Library / Cache / AndroidStudio'um Önizleme 1.5G ve bunların 1.2G'si “Maven” alt dizini tarafından alındı.

Saçma. Dizini neredeyse hiç kullanmıyoruz. Bunun birincil kullanımı Proje Yapısı İletişim Kutusunda Bağımlılık düzenleyicisidir, ancak bunun için önceden hesaplanmış bir dizine sahip olmamız gerekmez. MavenCentral, birileri yapay nesneler ararken talep üzerine kullanabileceğimiz hızlı bir çevrimiçi JSON aramasına sahiptir. Gelen https://android-review.googlesource.com/#/c/94843/ biz bağımlılıkları olmadığını denetler güncel bir tiftik çek eklendi ve eserler bir avuç arayışı neredeyse anlık olduğunu.

Kısacası, gerçekten önbelleğe ihtiyacımız yok; .gradle ve maven .pom dosyalarında kod tamamlanmasına yardımcı olabilir, ancak bu çok önemli bir kullanıcı tabanı değildir ve kesinlikle tüm kullanıcıların bir gün yapabilme olasılığı için 1.5G indirme hızını ve disk alanını feda etmesi gereken bir şey değildir . Daha fazla bilgi için: Maven endeksi çok büyük !

Ayrıca, Hacker News hakkındaki bu çok kısa (1Q ve 1A) tartışmayı ilginç bulabilirsiniz.


Arkasındaki şirket JFrog ile birlikteyim ve , profilime bak ayrıntılar ve bağlantılar için .


60

Ben de aynı şeyi merak ediyordum ve kesin bir cevabım yok ama öğrendiğimi (az) paylaşmaya değeceğini düşündüm. Google Code'daki bir sayı içinde Maven Central'dan JCenter'a geçişten bahsettim , ancak tam olarak ne zaman gerçekleştiğine dair ayrıntıları tespit etmedim - Android Studio için son değişiklikler listesinde bahsedilemedi.

JCenter'de okumadan, JFrog şirketinden (daha önce karşılaştığım Bintray'ın arkasındaki depo ve sanırım 'J' nereden geliyor). Bintray bloguna göre, Bintray Maven Central'ın bir üst kümesidir , bu yüzden eğer doğruysa eksik bağımlılıklarla ilgili sorunlar olmamalıdır, ancak sanırım bu projelerinizde tam olarak ne kullandığınıza bağlı olacaktır - her zaman doğrudan her ikisi de kolayca aranabilir web siteleri var gibi depoları kontrol edin. Bu depoları kimin koruduğu için, en iyi bildiğim kadarıyla, bağımlılıkları üreticilerin her bir repoya bağımlılıklarını eklemek ve sadece hizmeti korumak için repo sahibine kadar.

Ne zaman değiştirileceği açısından çalışmak zordur. AOSP hala Maven Central'ı kullanıyor (Sanırım Yeni Android Uygulaması için Şablonlar'a bakarken), ancak bu şablon da hala çok eski bir Gradle sürümü (0.4) kullanıyor. Diğerleri hakkında jcenter bağımlılıkları ile ilgili sorunları olan, ancak gerçekten çok fazla rapor edilmeyen birkaç sorun var ve Google, AS finalini yayınlamadan önce tekrar başka bir repoya geçecek. Maven Central şimdilik sizin için iyi çalışıyorsa, özellikle büyük ticari çözümler geliştiriyorsanız o zamana kadar geçişi durdurabilirsiniz.


5
Burada, Maven Central, JCenter ve diğerleri dahil olmak üzere, gradle destekli depoların listesini de bulabilirsiniz: gradle.org/docs/current/userguide/…
SGill

11
Depolarla ilgili Gradle belgelerinde Maven deposunun yalnızca http aktarım protokolünü desteklerken JCenter https'yi desteklediğini söylüyor. Google https'nin büyük bir hayranı, belki de geçiş nedenleri bu mu?
Rob Meeuwisse

2
Sadece bir güncelleme - Android Studio'nun RC2'si itibariyle, hala JCenter, bu yüzden tüm bağımlılıklarınızı kontrol ettikten sonra Android Studio sonlandığında, geçiş yapmak için iyi bir zamanın yakında olabileceğini
düşünürüm

5
Merkez Veri Havuzu / Maven Central https'yi iyi bir şekilde destekler.
Manfred Moser

2
Şubat 2015 güncellemesi: AS 1.1 RC 1, hala jcenter () buildscript / repositories altında
Jose_GD

26

Build.gradle dosyasındaki varsayılan değer ne olursa olsun - ekip tabanlı bir geliştirme çabasında Sonatype Nexus veya JFrog Artifactory gibi bir depo yöneticisini kullanmalı ve doğrudan bu yukarı doğru depolara başvurmamalısınız.

Bu, çok fazla bant genişliği kaydetmenize, hem de diğer birçok depoları birleştirmenize ve hepsini kendi ağınızda yönetmenize izin verecektir.

Maven Central vs JCenter açısından. JCenter, JFrog'dan Maven Central'ı benimseme, genişletme (ve yok etme?) Çabasıdır. Maven Central, Maven, SBT ve diğerlerinde varsayılan depo, Gradle ise JCenter'a geçti. JFrog ve Gradleware'in şirketler olarak birlikte çalıştığı düşünüldüğünde bu şaşırtıcı değil. Android SDK, Gradle'ı derleme sistemi olarak kullandığından, JCenter'a geçiş bir sonraki adımdı.

JCenter'in kendisi Maven Central'ın tepesinde ince bir kaplamadır. Proxy yapar (az çok başarılı bir şekilde) ve ek bileşenler ekler. Her ikisi de CDN ağlarında barındırılır ve yüksek performans gösterir. Maven Central'ın kendisi tüm Eclipse, Apache ve diğer birçok açık kaynaklı projenin hedefidir ve onsuz JCenter çoğunlukla boş olurdu.

Bunlardan birini kullanmak iyi çalışacaktır, ancak doğrudan kaynağa gitmenizi öneririm ve bunun üzerine bir havuz yöneticisi kullanarak bunun kontrolünü ele geçiririm. Örneğin Nexus Açık Kaynak ücretsizdir ve Maven, Gradle, SBT, Ivy ve diğerleri tarafından kullanılan Maven depolarına ve NuGet, NPM ve RubyGems desteğine sahiptir.

Feragatname: Android Central Maven Plugin'in proje lideri Sonatype için Nexus ve Nexus eğitmeni ile Repository Management'ın yazarı ve AOSP'dan yeniden inşa ederek bazı Android kütüphanelerini Central'a ittim.


3
JFrog mühendislik ekibine göre, Merkezi depodan dinamik olarak yapay nesneler talep ediyor. Ben o vekil derdi .. Eğer size başka bir şey aramak istiyorsanız.
Manfred Moser

4
Örneğin, ilerici organizasyon pom veya android maven eklentisi ve Central'da bulunan diğer tüm projelerim jcenter'da görünür. Hiçbiri Central'dan başka bir yerde yayınlanmadığından onları oradan aldınız. Ve bu iyi. Jcenter sadece başka bir dağıtım platformudur.
Manfred Moser


5
Hahah .. JCenter sadece Central'dan indiriyor ve sonra kullanıcılara aktarılıyor.
Manfred Moser

2
Basit bir "Maven Central'ın arkasındaki şirket için çalışıyorum" yeterli olacaktır. Bu sloganın imzası değil. stackoverflow.com/help/behavior açıkça "... yanıtlarınızda ilişkinizi ifşa etmeniz gerektiğini" belirtir.
akış

8

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

bu makale size cevap verebilir.

İlk başta, Android Studio varsayılan bir depo olarak Maven Central'ı seçti. Android Studio'nun eski sürümünden yeni bir proje oluşturduğunuzda, mavenCentral () otomatik olarak build.gradle içinde tanımlanır.

Ancak Maven Central'ın en büyük problemi geliştirici dostu olmaması. Kütüphaneyi yüklemek şaşırtıcı derecede zor. Bunu yapabilmek için geliştiricinin bir miktar geeky seviyesinde olması gerekir. Örneğin, bir güvenlik endişesi ve benzeri başka bir nedenle, Android Studio ekibi varsayılan depoyu jcenter'a değiştirmeye karar verdi, çünkü Android Studio'nun en son sürümünden yeni bir proje oluşturduktan sonra jcenter () otomatik olarak tanımlanacak mavenCentral () yerine.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.