84 votes

JCenter est-il définitivement fermé (31 octobre) ?

Note du modérateur : Il semble qu'il s'agisse d'une interruption de service. Stack Overflow (en anglais) n'est pas en mesure de fournir une assistance pour cette question

Failed to list versions for com.google.http-client:google-http-client-android. Unable to load Maven meta-data from https://jcenter.bintray.com/com/google/http-client/google-http-client-android/maven-metadata.xml. Could not HEAD 'https://jcenter.bintray.com/com/google/http-client/google-http-client-android/maven-metadata.xml'. Read timed out

J'ai essayé de créer une application Android, mais j'ai obtenu l'erreur ci-dessus. Lorsque je me connecte à "https://jcenter.bintray.com/com/google/http-client/google-http-client-Android/maven-metadata.xml", une erreur nginx 403 apparaît. JCenter est-il en panne ? Que dois-je faire ?

48voto

HBB20 Points 567

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.

Toggle offline mode option

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 :

  1. 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.

  2. 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.
  3. 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.
      1. 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.
      2. 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.
  4. 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.

Build log annotated screenshot

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.

28voto

Steve Points 369

Enfin, après des heures de coups de tête, le problème est résolu. En android/build.gradle ajouter ce qui suit en haut de la page allprojects -> repositories .

Il enlèvera jcenter() de toutes les dépendances pendant la phase de configuration et le remplacer par mavenCentral() .

Il devrait ressembler à ceci :

    allprojects {
      repositories {
          all { ArtifactRepository repo ->
              println repo.url.toString()
              if (repo.url.toString().startsWith("https://jcenter.bintray.com/")) {
                  project.logger.warn "Repository ${repo.url} removed."
                  remove repo
                  mavenCentral()
              }
          }
          gradlePluginPortal() // add this if you get further errors 
          ...other repos
      }
    }

J'espère que cela vous aidera :)

8voto

honam wong Points 81

Oui, vous n'êtes pas seul. Jcenter semble en panne aujourd'hui.

Ma solution consiste à modifier tous les jCenter a mavenCentral de root/android/build.gradle

N'oubliez pas non plus les librairies node_module/*error libaray*/android/build.gradle

6voto

Madray Haven Points 21

Je viens de rencontrer ce problème également, je ne sais pas exactement pourquoi jcenter renvoie 403, mais vous pouvez résoudre ce problème en ajoutant mavenCentral() avant jcenter() dans le paramétrage des dépôts, comme ceci :

    repositories {
        ...
        mavenCentral() // add this line
        jcenter()
        ...
    }

5voto

cani1see Points 21

Je pense que mavenCentral n'est pas une alternative complète à jcenter.
J'utilise le miroir d'aliyun. remplacer jcenter() con maven { url "https://maven.aliyun.com/repository/jcenter" } .

Je ne sais pas s'il est accessible depuis l'extérieur de la Chine, ou si aliyun censure certains paquets, ou s'il est à jour.

à remplacer :

en android/build.gradle

buildscript {
    ...
    repositories {
        ...
-        jcenter()
+       maven { url "https://maven.aliyun.com/repository/jcenter" }
    }
}
allprojects {
+   buildscript {
+       repositories {
+           maven { url "https://maven.aliyun.com/repository/jcenter" }
+       }
+   }
    repositories {
        ...
-       jcenter()
+       maven { url "https://maven.aliyun.com/repository/jcenter" }
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X