Android-Buildscript-Repositorys: jcenter VS mavencentral

239

Das letzte Mal, als ich Android Studio verwendet habe, wurden .gradleDateien mit mavencentral()Buildscript-Repositorys generiert jcenter().

Könnte jemand die damit verbundenen Probleme erklären. Gibt es noch andere Repos? Wann sollten wir sie wechseln? Welche Auswirkungen haben sie auf Projekte, Module, Bibliotheken? Weitere wichtige Informationen für Android-Entwickler?

Wer ist für die Pflege dieser Repos verantwortlich?

Jacob
quelle
6
Wie @sgill erwähnt hat, sind JFrog die Betreuer von Bintray und JCenter. Wenn Sie spezielle Fragen haben, feuern Sie ab :)
JBaruch
Weil ... Android. ;)
Joshua Pinter

Antworten:

150

Bei Bintray habe ich gerade einen sehr detaillierten Blog-Beitrag verfasst, in dem die Gründe beschrieben werden, warum Google diese Änderung vorgenommen hat. Hier sind die wichtigsten Punkte:

  • JCenter ist ein Java-Repository in Bintray , dem weltweit größten Repo für Java- und Android-OSS-Bibliotheken, -Pakete und -Komponenten.
  • Der gesamte Inhalt in JCenter wird über ein CDN mit einer sicheren HTTPS-Verbindung bereitgestellt. In der Zeit der Migration (Android Studio 0.8) war das zentrale Maven 2-Repository nur HTTP und HTTPS wurde nicht unterstützt. Referenz: 51.6.2. Maven zentrales Repository .
  • jcenter()ist eine Obermenge von mavenCentral(), die viele zusätzliche Repositories und Artefakte umfasst.
  • In verschiedenen Szenarien und aus verschiedenen Ländern ist Bintray schneller als Maven Central (z. B. aus Israel). In anderen ist es sehr eng. Da Maven Central und Bintray unterschiedliche CDNs verwenden, die Regionen adaptiv bevorzugen, kann sich dies in beide Richtungen ändern.
  • Bintray verfolgt einen anderen Ansatz zur Paketidentifizierung als das bisherige Maven Central. Dies ist eine große und ernste Sicherheitsfrage. Es ist wichtig.
  • Wenn Sie Ihr Paket wirklich nach Maven Central bringen müssen (zur Unterstützung älterer Tools), können Sie dies auch über Bintray, per Knopfdruck oder sogar automatisch tun .

In Bezug auf Leistungsverbesserungen hatten einige Befürworter von Android-Entwicklern das Problem der riesigen Indizierung mit Maven Central gesehen / bemerkt.

Mit den Worten von Tor Norbye :

Ich habe AndroidStudio mit einem brandneuen Einstellungsverzeichnis ausgeführt, also hat es Maven Central verbunden und einen Index der verfügbaren Artefakte heruntergeladen.

Dann habe ich mir zufällig die Größe meines Verzeichnisses angesehen.

Mein ~ / Library / Cache / AndroidStudioPreview ist 1,5 G, und 1,2 G davon werden vom Unterverzeichnis „Maven“ übernommen.

Das ist lächerlich. Wir verwenden den Index kaum. Die Hauptverwendung dafür ist der Abhängigkeitseditor im Projektstrukturdialog, aber wir brauchen wirklich keinen vorberechneten Index dafür. MavenCentral verfügt über eine schnelle Online-JSON-Suche, die wir bei Bedarf verwenden können, wenn jemand nach Artefakten sucht. In https://android-review.googlesource.com/#/c/94843/ haben wir eine Flusenprüfung hinzugefügt, die überprüft, ob die Abhängigkeiten auf dem neuesten Stand sind, und die Suche nach einer Handvoll Artefakten ist nahezu augenblicklich.

Kurz gesagt, wir brauchen den Cache wirklich nicht. Es kann bei der Code-Vervollständigung in .gradle- und Maven-.pom-Dateien hilfreich sein, aber das ist kein besonders wichtiger Anwendungsfall, und sicherlich sollten nicht alle Benutzer 1,5 G Download-Geschwindigkeit und Speicherplatz opfern müssen, um die Möglichkeit eines Tages zu haben. Lesen Sie mehr über: Der Maven-Index ist riesig !

Vielleicht finden Sie diese sehr kurze Diskussion (1Q und 1A) in den Hacker News auch interessant.


Ich bin bei JFrog , der Firma dahinter und Einzelheiten und Links finden Sie in meinem Profil .

JBaruch
quelle
60

Ich habe mich das gleiche gefragt, und ich habe keine endgültige Antwort, aber ich dachte, es könnte sich lohnen, zu teilen, was ich (wenig) gelernt habe. Ich habe die Umstellung von Maven Central auf JCenter in einer Ausgabe von Google Code erwähnt , aber keine Details darüber gefunden, wann genau dies geschehen ist. In der Liste der letzten Änderungen für Android Studio wurde keine Erwähnung gefunden.

Nach dem Lesen von JCenter ist es das Repository hinter Bintray von der Firma JFrog (der ich zuvor begegnet bin, und ich denke, dort kommt das 'J' her). Laut dem Bintray-Blog ist Bintray eine Obermenge von Maven Central . Wenn dies zutrifft, sollte es keine Probleme mit fehlenden Abhängigkeiten geben, aber ich denke, es wird genau davon abhängen, was Sie in Ihren Projekten verwenden - Sie könnten immer direkt Überprüfen Sie die Repos, da beide schöne, leicht durchsuchbare Websites haben. Für diejenigen, die diese Repos verwalten, liegt es meines Wissens an den Produzenten der Abhängigkeiten, ihre Abhängigkeiten zu jedem Repo hinzuzufügen, und dem Repo-Besitzer, nur um den Service aufrechtzuerhalten.

In Bezug auf den Zeitpunkt des Wechsels ist es schwierig zu trainieren. Ich denke, AOSP verwendet immer noch Maven Central (aus der Suche nach Vorlagen für neue Android-Anwendungen), aber diese Vorlage verwendet auch immer noch eine sehr alte Gradle-Version (0.4). Es gibt einige Probleme mit anderen, die Probleme mit Abhängigkeiten von jcenter haben, aber nicht wirklich viele gemeldet haben, und es ist möglich, dass Google vor der Veröffentlichung von AS final erneut zu einem anderen Repo wechselt. Wenn Maven Central vorerst noch gut für Sie funktioniert, können Sie das Umschalten bis dahin unterbrechen, insbesondere wenn Sie große kommerzielle Lösungen entwickeln.

SGill
quelle
5
Die Liste der von Gradle unterstützten Repositories finden Sie hier - einschließlich Maven Central, JCenter und anderer: gradle.org/docs/current/userguide/…
SGill
11
In der Gradle-Dokumentation zu Repositorys heißt es, dass das Maven-Repo nur das http-Transportprotokoll unterstützt, während JCenter https unterstützt. Google ist ein großer Fan von https. Vielleicht ist das der Grund für den Wechsel?
Rob Meeuwisse
2
Nur ein Update - ab RC2 von Android Studio ist es immer noch JCenter, daher würde ich denken, dass ein guter Zeitpunkt für einen Wechsel bald sein könnte, wenn Android Studio endgültig ist, nachdem alle Ihre Abhängigkeiten verfügbar sind ....
SGill
5
Das Central Repository / Maven Central unterstützt https einwandfrei.
Manfred Moser
2
Update Februar 2015: AS 1.1 RC 1, noch jcenter () unter Buildscript / Repositories
Jose_GD
26

Unabhängig von der Standardeinstellung in der Datei build.gradle sollten Sie bei einer teambasierten Entwicklung wirklich einen Repository-Manager wie Sonatype Nexus oder JFrog Artifactory verwenden und nicht direkt auf diese vorgelagerten Repositorys verweisen.

Auf diese Weise können Sie viel Bandbreite sparen, beide und viele andere Repositorys kombinieren und alles in Ihrem eigenen Netzwerk verwalten.

In Bezug auf Maven Central vs JCenter. JCenter ist das Bestreben von JFrog, Maven Central zu umarmen, zu erweitern (und auszurotten?). Maven Central ist das Standard-Repository in Maven, SBT und anderen, während Gradle zu JCenter gewechselt ist. Dies ist nicht überraschend, wenn man bedenkt, dass JFrog und Gradleware als Unternehmen zusammenarbeiten. Da das Android SDK jetzt Gradle als Build-System verwendet, war die Umstellung auf JCenter ein logischer nächster Schritt.

JCenter selbst ist ein dünnes Furnier auf Maven Central. Es überträgt es (mehr oder weniger erfolgreich) und fügt zusätzliche Komponenten hinzu. Beide werden in CDN-Netzwerken gehostet und sind leistungsstark. Maven Central selbst ist das Ziel für alle Eclipse-, Apache- und die meisten anderen Open Source-Projekte. Ohne Maven Central wäre JCenter größtenteils leer.

Die Verwendung einer der beiden Methoden funktioniert einwandfrei, aber ich würde empfehlen, direkt zur Quelle zu gehen, wo Sie können, und darüber hinaus mithilfe eines Repository-Managers die Kontrolle darüber zu übernehmen. Nexus Open Source zum Beispiel ist kostenlos und unterstützt Maven-Repositorys, wie sie von Maven, Gradle, SBT, Ivy und anderen verwendet werden, sowie NuGet-, NPM- und RubyGems-Unterstützung.

Haftungsausschluss: Ich bin Autor von Repository Management mit Nexus und Nexus Trainer für Sonatype, dem Sponsor des kostenlosen Central Repository, dem Projektleiter des Android Maven Plugins, und habe einige Android-Bibliotheken durch Neuerstellung von AOSP auf Central übertragen.

Manfred Moser
quelle
3
Laut dem JFrog-Entwicklungsteam werden Artefakte dynamisch aus dem zentralen Repository angefordert. Ich würde diesen Proxy nennen ... wenn Sie ihn etwas anderes nennen möchten, das Ihnen überlassen bleibt.
Manfred Moser
4
ZB erscheinen meine Projekte wie die progressive Organisation pom oder das Android Maven Plugin und alle anderen, die sich in Central befinden, alle in jcenter. Keiner von ihnen wird irgendwo anders als in Central veröffentlicht, also haben Sie sie von dort übernommen. Und das ist gut so. Jcenter ist nur eine weitere Vertriebsplattform.
Manfred Moser
5
Hahah .. JCenter lädt nur von Central herunter und gibt es dann an die Benutzer weiter.
Manfred Moser
2
Ein einfaches "Ich arbeite für die Firma hinter Maven Central" würde ausreichen. Das ist keine Signatur des Slogans. Bei stackoverflow.com/help/behavior heißt es eindeutig: "... Sie müssen Ihre Zugehörigkeit in Ihren Antworten offenlegen."
Flow
8

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

Dieser Artikel kann Ihre Frage beantworten.

Zunächst wählte Android Studio Maven Central als Standard-Repository. Sobald Sie ein neues Projekt aus einer alten Version von Android Studio erstellen, wird mavenCentral () automatisch in build.gradle definiert.

Das große Problem von Maven Central ist jedoch, dass es nicht entwicklerfreundlich ist. Es ist überraschend schwierig, die Bibliothek hochzuladen. Um dies zu können, muss der Entwickler auf einem gewissen geekigen Niveau sein. Aus irgendeinem Grund, zum Beispiel aus Sicherheitsgründen usw., hat das Android Studio-Team beschlossen, das Standard-Repository stattdessen auf jcenter umzustellen, da Sie sehen können, dass jcenter () automatisch definiert wird, sobald Sie ein neues Projekt aus der neuesten Version von Android Studio erstellen anstelle von mavenCentral ().

Taotao
quelle