Tldr ;
Oui. jcenter
est en panne en ce moment. Mais il existe un moyen de résoudre le problème. jcenter
a été supprimée il y a un certain temps et est restée disponible en lecture seule. Jusqu'à présent, aucune information n'a été donnée sur la date à laquelle il sera à nouveau disponible. Selon votre situation, vous disposez d'un accès rapide ou d'un accès pas si vite pour vous.
Où puis-je vérifier l'état d'avancement ?
mettre à jour : Un nouvel incident est signalé ici. Vérifier ce qui suit .
Comme @Adrian l'a mentionné dans un commentaire, vous pouvez vérifier le statut de l'incident en cours sur Page d'état des incidents de Gradle . Mise à jour : Le statut indique "Résolu" mais je ne peux toujours pas créer le projet. Je me demande donc si cette page d'état ne montre pas simplement l'impact des jcenter
sur le portail des plugins Gradle et non le statut de jcenter
en général.
Jusqu'à présent, je n'ai trouvé aucun endroit qui signale l'état de bintray. Merci de commenter ci-dessous si vous en trouvez un.
Que puis-je faire maintenant ?
Mise à jour recommandée :
Maintenant que l'incident est résolu par la mise à jour de gradlePluginPortal pour servir de miroir à jcenter (ou presque), il est fort possible que l'ajout des dépôts suivants avant jcenter()
devrait résoudre le problème :
google()
mavenCentral()
gradlePluginPortal()
Solution temporaire :
Activez le mode hors ligne de Gradle comme indiqué ci-dessous. Cela fonctionnera pour la machine locale mais ne fonctionnera pas pour la CI.
Solution robuste :
C'est toujours une bonne idée d'abandonner un service obsolète. La plupart des Les bibliothèques actives sont maintenant hébergées sur d'autres dépôts populaires comme google repo, Maven Central ou gradle plugin repo.
Pour ajouter ces dépôts dans votre projet, ajoutez les éléments suivants dans le bloc dépôts (vous les avez peut-être déjà). L'ordre est important. Veillez à les placer avant jcenter()
ceci indique à gradle de regarder dans d'autres dépôts avant d'essayer d'extraire à partir de jcenter()
.
Conseil : Effectuez une recherche globale pour jcenter()
et s'assurer que chaque bloc de dépôt qui contient des jcenter()
a ces autres dépôts.
repositories {
...
google()
mavenCentral()
gradlePluginPortal()
jcenter()
...
}
Faites un gradle sync et un clean build et voyez si cela fonctionne.
Cela n'a pas fonctionné ?
Ne vous inquiétez pas (pour l'instant). Il s'agit d'une situation courante. La solution ci-dessus ne fonctionnera pas seule dans certaines situations :
-
Lorsqu'il est déplacé de jcenter()
vers d'autres repo (comme mavenCentral()
), les auteurs ont décidé de mettre à jour le numéro de version. Cela signifie simplement que vous devez mettre à jour la version de cette dépendance pour la récupérer dans un autre repo. Recherchez la bibliothèque qui apparaît comme indisponible dans le journal d'échec de la construction. Trouvez sa documentation sur github ou develop pour vérifier la dernière version. Gradle Sync + clean build.
-
Les dépôts que nous venons d'ajouter sont populaires mais ne sont pas les seuls. Lorsque les auteurs de la bibliothèque ont dû passer de jcenter
à un autre endroit, ils n'ont pas choisi l'un d'entre eux. Dans ce cas, consultez la page github ou la documentation des développeurs. En général, les auteurs indiquent le dépôt requis sur ces pages. Si vous constatez que ce dépôt n'est pas présent dans votre projet, ajoutez-le. Gradle Sync + clean build.
-
Attention : Certains auteurs ont choisi des options de dépôt comme
jitpack.io
en grande partie parce qu'elle était plus rapide et plus facile que d'autres. Mais il faut être conscient des problèmes que cela pose. Melix de gradle résume les préoccupations avec jitpack.io. En raison de problèmes de sécurité potentiels, je recommande de consulter l'équipe et un expert en sécurité avant d'ajouter cela.
-
Il est maintenant temps de s'inquiéter un peu. Il est fort possible que vous utilisiez une bibliothèque qui est dépréciée ou qui n'est plus maintenue. Trouvez la page github de la bibliothèque et voyez si l'auteur a déclaré qu'elle était obsolète ou qu'elle n'était plus maintenue dans le fichier readme. Vous pouvez même vérifier la date du dernier commit. Si c'est il y a longtemps, cela signifie qu'elle n'est plus maintenue et que l'auteur ne s'est pas soucié de déplacer la bibliothèque de jcenter()
vers n'importe quel autre repo.
- Aller sur GitHub issues of the repo. Quelqu'un a dû poster une question concernant le projet de passer de
jcenter
. Si vous avez de la chance, il se peut même que quelqu'un ait créé un fork et l'ait hébergé ailleurs. Par exemple, j'utilise spanny
dans l'un des projets et l'auteur ne l'a pas déplacé. GustavoRoss a pris soin suffisamment de fourchettes et de mouvements.
- Personne n'a bifurqué et ne s'est déplacé ? Dans ce cas, deux options s'offrent à vous.
- Cherchez une autre bibliothèque active qui fasse la même chose pour vous. Bien sûr, cela prend du temps, mais c'est une bonne idée de s'éloigner des ressources obsolètes.
- Si vous n'avez pas le temps d'intégrer une nouvelle bibliothèque ou s'il n'en existe pas d'autre, alors soyez le héros et faites un fork du projet GitHub et déménagez.
-
Mais bon, je ne me souviens pas avoir mis la bibliothèque en question dans ma base de code ? Cela signifie qu'il s'agit d'une dépendance transitive (une dépendance de votre dépendance directe). Vérifiez à nouveau la dernière version de votre dépendance directe et, avec un peu de chance, la nouvelle version a corrigé ce problème.
Comment vérifier la dépendance directe et transitive ?
- votre journal d'échec de construction contient la réponse.
Nous espérons qu'à ce stade, vous avez réussi à faire fonctionner la construction. Si ce n'est pas le cas, il faut espérer que jcenter
de revenir bientôt et de commencer à planifier de s'en éloigner.