Référentiels buildscript Android: jcenter VS mavencentral

239

La dernière fois que j'ai utilisé Android Studio, il a généré des .gradlefichiers avec des mavencentral()référentiels buildscript alors qu'il y en a maintenant jcenter().

Quelqu'un pourrait-il expliquer les problèmes liés à cela. Y a-t-il d'autres repos? Quand devrions-nous les changer? Quel impact ont-ils sur les projets, modules, bibliothèques? D'autres éléments essentiels pour les développeurs Android?

Qui est responsable du maintien de ces repos?

Jacob
la source
6
Comme @sgill l'a mentionné, JFrog est le responsable de Bintray et JCenter. Si vous avez des questions spécifiques,
lancez-
Parce que ... Android. ;)
Joshua Pinter

Réponses:

150

Chez Bintray, je viens de publier un article de blog très détaillé décrivant les raisons pour lesquelles Google a effectué ce changement. Voici les points les plus importants:

  • JCenter est un référentiel Java dans Bintray , qui est le plus grand référentiel au monde pour les bibliothèques, packages et composants Java et Android OSS.
  • Tout le contenu de JCenter est diffusé sur un CDN, avec une connexion HTTPS sécurisée. À l'époque de la migration (Android Studio 0.8) Le référentiel central maven 2 était uniquement HTTP et HTTPS n'était pas pris en charge. Référence: 51.6.2. Dépôt central Maven .
  • jcenter()est un sur-ensemble de mavenCentral(), qui comprend de nombreux référentiels et artefacts supplémentaires.
  • Dans différents scénarios et de différents pays, Bintray est plus rapide que Maven Central (par exemple en provenance d'Israël). Dans d'autres, c'est très proche. Étant donné que Maven Central et Bintray utilisent des CDN différents qui favorisent de manière adaptative les régions, cela peut changer dans les deux sens.
  • Bintray a une approche d'identification des colis différente de celle de l'ancien Maven Central. Il s'agit d'une question de sécurité importante et grave. C'est important.
  • Si vous avez vraiment besoin de faire parvenir votre package à Maven Central (pour prendre en charge les outils hérités), vous pouvez également le faire à partir de Bintray, en un clic sur un bouton ou même automatiquement .

En ce qui concerne les améliorations de performances, quelques défenseurs des développeurs Android ont rencontré / remarqué le problème de l'indexation énorme avec maven central.

Pour reprendre les mots de Tor Norbye :

J'ai exécuté AndroidStudio avec un tout nouveau répertoire de paramètres, il est donc allé connecter maven central et téléchargé un index des artefacts disponibles.

Ensuite, il m'est arrivé de regarder la taille de mon répertoire.

Mon ~ / Library / Cache / AndroidStudioPreview est 1.5G, et 1.2G de ceux-ci sont pris par le sous-répertoire "Maven".

C'est ridicule. Nous utilisons à peine l'indice du tout. Son utilisation principale est l'éditeur de dépendances dans la boîte de dialogue Structure du projet, mais nous n'avons vraiment pas besoin d'un index précalculé pour cela. MavenCentral propose une recherche JSON en ligne rapide que nous pouvons utiliser à la demande lorsque quelqu'un recherche des artefacts. Dans https://android-review.googlesource.com/#/c/94843/, nous avons ajouté une vérification des peluches qui vérifie si les dépendances sont à jour et la recherche d'une poignée d'artefacts est presque instantanée.

En bref, nous n'avons vraiment pas besoin du cache; cela peut aider à compléter le code dans les fichiers .gradle et maven .pom, mais ce n'est pas un cas d'utilisation très important, et certainement pas quelque chose que tous les utilisateurs devraient avoir à sacrifier 1,5 G de vitesse de téléchargement et d'espace disque pour avoir la possibilité de le faire un jour. En savoir plus sur: L'indice Maven est énorme !

En outre, vous pourriez trouver cette très courte discussion (1Q et 1A) sur Hacker News intéressante.


Je suis avec JFrog , l'entreprise derrière et , voir mon profil pour les détails et les liens.

JBaruch
la source
60

Je me posais la même question, et je n'ai pas de réponse définitive, mais j'ai pensé qu'il valait peut-être la peine de partager ce que j'avais (peu) appris. J'ai trouvé la mention du passage de Maven Central à JCenter dans un problème sur Google Code , mais je n'ai pas repéré de détails sur le moment exact - je n'ai pas trouvé de mention dans la liste des modifications récentes pour Android Studio.

D'après la lecture de JCenter, c'est le référentiel derrière Bintray, de la société JFrog (que j'ai rencontré auparavant, et je suppose que c'est de là que vient le `` J ''). Selon le blog Bintray, Bintray est un surensemble de Maven Central , donc si c'est vrai, il ne devrait pas y avoir de problèmes avec les dépendances manquantes, mais je suppose que cela dépendra exactement de ce que vous utilisez dans vos projets - vous pouvez toujours directement vérifiez les dépôts car les deux ont de beaux sites Web facilement consultables. Donc, pour qui gère ces référentiels, pour autant que je sache, il appartient aux producteurs des dépendances d'ajouter leurs dépendances à chaque référentiel, et au propriétaire du référentiel de simplement maintenir le service.

En ce qui concerne le moment où passer, il est difficile de s'entraîner. AOSP utilise toujours Maven Central je pense (en regardant dans les modèles pour une nouvelle application Android), mais ce modèle utilise également toujours une très ancienne version de Gradle (0.4). Il y a quelques problèmes avec d'autres ayant des problèmes avec les dépendances de jcenter, mais pas vraiment beaucoup signalés, et il est possible que Google passe à nouveau à un autre référentiel avant de publier AS final. Si Maven Central fonctionne toujours bien pour vous pour l'instant, vous pouvez retarder la commutation jusque-là, surtout si vous créez de grandes solutions commerciales.

SGill
la source
5
Vous pouvez également trouver la liste des référentiels pris en charge par gradle ici - y compris Maven Central, JCenter et autres: gradle.org/docs/current/userguide/…
SGill
11
Dans la documentation Gradle sur les référentiels, il est indiqué que le référentiel Maven ne prend en charge que le protocole de transport http, tandis que JCenter prend en charge https. Google est un grand fan de https, alors c'est peut-être la raison pour laquelle ils ont changé?
Rob Meeuwisse
2
Juste une mise à jour - depuis RC2 d'Android Studio, c'est toujours JCenter, donc je pense qu'un bon moment pour passer pourrait être bientôt, quand Android Studio deviendra définitif, après avoir vérifié que toutes vos dépendances sont disponibles ....
SGill
5
Le référentiel central / Maven Central prend en charge https très bien.
Manfred Moser
2
Mise à jour de février 2015: AS 1.1 RC 1, toujours jcenter () sous buildscript / repositories
Jose_GD
26

Quelle que soit la valeur par défaut dans le fichier build.gradle - dans un effort de développement en équipe, vous devez vraiment utiliser un gestionnaire de référentiel comme Sonatype Nexus ou JFrog Artifactory et ne pas référencer directement ces référentiels en amont.

Cela vous permettra d'économiser beaucoup de bande passante, de combiner les deux et de nombreux autres référentiels et de tout gérer dans votre propre réseau.

En termes de Maven Central vs JCenter. JCenter est l'effort de JFrog pour embrasser, étendre (et exterminer?) Maven Central. Maven Central est le référentiel par défaut dans Maven, SBT et autres, tandis que Gradle est passé à JCenter. Cela n'est pas surprenant étant donné que JFrog et Gradleware travaillent ensemble en tant qu'entreprises. Étant donné que le SDK Android utilise Gradle comme système de construction maintenant, le passage à JCenter était une prochaine étape logique.

JCenter lui-même est un mince placage sur le dessus de Maven Central. Il le proxy (avec plus ou moins de succès) et ajoute des composants supplémentaires. Les deux sont hébergés sur des réseaux CDN et hautement performants. Maven Central lui-même est la cible de tous les projets Eclipse, Apache et la plupart des autres projets open source et sans lui, JCenter serait pour la plupart vide.

L'utilisation de l'un d'eux fonctionnera bien, mais je suggère d'aller directement à la source où vous pouvez et en plus de prendre le contrôle en utilisant un gestionnaire de référentiel. Nexus Open Source, par exemple, est gratuit et prend en charge les référentiels Maven utilisés par Maven, Gradle, SBT, Ivy et d'autres, ainsi que NuGet, NPM et RubyGems.

Avertissement: je suis l'auteur de Repository Management with Nexus et Nexus trainer for Sonatype, le sponsor du Central Repository gratuit, le chef de projet du plug-in Android Maven et j'ai poussé certaines bibliothèques Android vers Central en reconstruisant à partir d'AOSP.

Manfred Moser
la source
3
Selon l'équipe d'ingénierie de JFrog, il demande dynamiquement des artefacts au référentiel central. J'appellerais ce proxy .. si vous voulez l'appeler quelque chose d'autre qui vous appartient.
Manfred Moser
4
Par exemple, mes projets comme l'organisation progressive pom ou le plugin android maven et tous les autres qui sont dans Central apparaissent tous dans jcenter. Aucun d'entre eux n'est publié ailleurs que dans Central, vous les avez donc récupérés. Et c'est très bien. Jcenter n'est qu'une autre plate-forme de distribution.
Manfred Moser
5
Hahah .. JCenter ne télécharge qu'à partir de Central puis passe aux utilisateurs.
Manfred Moser
2
Un simple «je travaille pour l'entreprise derrière Maven Central» serait suffisant. Ce n'est pas une signature de slogan. stackoverflow.com/help/behavior indique clairement que "... vous devez divulguer votre affiliation dans vos réponses."
Flow
8

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

cet article peut répondre à votre question.

Au début, Android Studio a choisi Maven Central comme référentiel par défaut. Une fois que vous avez créé un nouveau projet à partir de l'ancienne version d'Android Studio, mavenCentral () est automatiquement défini dans build.gradle.

Mais le gros problème de Maven Central est qu'il n'est pas convivial pour les développeurs. Il est étonnamment difficile de télécharger la bibliothèque. Pour pouvoir le faire, le développeur doit être à un certain niveau de geek. Et pour une raison supplémentaire, par exemple un problème de sécurité, etc., l'équipe Android Studio a décidé de basculer le référentiel par défaut sur jcenter à la place, car vous pouvez voir qu'une fois que vous créez un nouveau projet à partir de la dernière version d'Android Studio, jcenter () serait automatiquement défini au lieu de mavenCentral ().

taotao
la source