web-dev-qa-db-fra.com

Android référentiels de compilation: jcenter VS mavencentral

La dernière fois que j'ai utilisé Android Studio, il générait des fichiers .gradle avec des référentiels mavencentral() alors que maintenant il existe jcenter().

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

Qui est responsable de la maintenance de ces pensions?

229
Jacob

Chez Bintray, je viens de lire n article de blog très détaillé décrivant les raisons pour lesquelles Google a apporté 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 Java et Android bibliothèques, packages et composants OSS.
  • Tout le contenu de JCenter est servi 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. Référentiel central Maven .
  • jcenter() est un sur-ensemble de mavenCentral(), qui englobe de nombreux référentiels et artefacts supplémentaires.
  • Dans différents scénarios et dans différents pays, Bintray est plus rapide que Maven Central (par exemple d’Israël). Dans d'autres c'est très proche. Etant donné que Maven Central et Bintray utilisent différents CDN qui favorisent les régions de manière adaptative, cela pourrait changer dans les deux sens.
  • Bintray a une approche d’identification des emballages différente de celle de l’ancien Maven Central. Ceci est une question de sécurité importante et sérieuse. C'est important.
  • Si vous avez vraiment besoin d’acheminer votre paquet vers Maven Central (pour prendre en charge les outils existants), vous pouvez également le faire depuis Bintray, en un clic ou même automatiquement .

En ce qui concerne les améliorations de performances, un certain nombre de Android défenseurs des développeurs ont fait face au problème de l’énorme indexation avec Maven Central.

Dans les mots de Tor Norbye :

J'ai exécuté AndroidStudio avec un tout nouveau répertoire de paramètres. Il a donc été connecté, connecté à 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 ~/Bibliothèque/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 de projet, mais nous n’avons vraiment pas besoin d’un index précalculé. 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é un contrôle de la charpie qui vérifie si les dépendances sont à jour et la recherche d'une poignée d'artefacts est presque instantané.

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 super important, et certainement pas quelque chose que tous les utilisateurs devraient avoir à sacrifiez 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 ceci très courte discussion (1Q et 1A) sur Hacker News intéressante.


Je suis avec JFrog , la société derrière bintray et artificiel , voir mon profil pour plus de détails et des liens.

141
JBaruch

Je me demandais la même chose, et je n'ai pas de réponse définitive, mais j'ai pensé qu'il serait peut-être intéressant de partager ce que (peu) j'avais appris. J'ai trouvé la mention du passage de Maven Central à JCenter dans un numéro de Google Code , mais je n'ai pas trouvé de détails sur le moment exact où cela s'est produit - je n'ai pas trouvé de mention dans la liste des modifications récentes de Android Studio.

D'après JCenter, il s'agit du 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 de Bintray, Bintray est un sur-ensemble de Maven Central , donc si c'est vrai, il ne devrait pas y avoir de problème de dépendances manquantes, mais je suppose que cela dépendra exactement de ce que vous utilisez dans vos projets - vous pouvez toujours consulter directement les pensions car les deux sites Web de Nice sont faciles à consulter. Donc, pour savoir qui gère ces pensions, autant que je sache, il appartient aux producteurs des dépendances d'ajouter leurs dépendances à chaque pension, et au propriétaire du dépôt de bien gérer le service.

Pour ce qui est de savoir quand changer, il est difficile de s’entraîner. AOSP utilise toujours Maven Central, je pense (en cherchant dans les modèles pour la nouvelle application Android), mais ce modèle utilise également une version très ancienne de Gradle (0.4). Il existe quelques problèmes concernant le fait que d'autres personnes ont des problèmes de dépendance avec jcenter, mais pas beaucoup, 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 le moment, vous pouvez attendre jusqu'à ce moment-là, surtout si vous construisez de grandes solutions commerciales.

59
SGill

Quelle que soit la valeur par défaut du fichier build.gradle, dans le cadre d’un effort de développement en équipe, vous devez utiliser un gestionnaire de référentiel tel que 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 sur votre propre réseau.

En termes de Maven Central vs JCenter. JCenter est un 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 a basculé vers JCenter. Cela n’est pas surprenant compte tenu du fait que JFrog et Gradleware travaillent ensemble en tant que sociétés. Étant donné que le Android SDK utilise Gradle en tant que système de génération, le passage à JCenter était une étape logique.

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

Utiliser l’un ou l’autre des deux fonctionnera très bien, mais je suggérerais d’aller directement à la source où vous pouvez et, au-dessus de cela, d’en 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 les supports NuGet, NPM et RubyGems.

Disclaimer: Je suis l'auteur de Repository Management avec Nexus et formateur Nexus pour Sonatype, le sponsor du référentiel central gratuit, le responsable du projet de Android Maven Plugin et j'ai poussé Android bibliothèques à Central en reconstruisant à partir d’AOSP.

24
Manfred Moser

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

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 de Android Studio, mavenCentral () serait automatiquement défini dans le fichier 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 avoir atteint un certain niveau de geek. Et avec d'autres raisons, par exemple un problème de sécurité, etc., Android l'équipe de Studio a décidé de basculer le référentiel par défaut vers jcenter, comme vous pouvez le constater dès que vous créez un nouveau projet à partir de la dernière version de Android Studio, jcenter () serait automatiquement défini à la place de mavenCentral ().

6
taotao