95 votes

"JCenter est en fin de vie" Avertissement de peluches Android, quel est le remplacement ?

Android Studio Arctic Fox Canary 8 a commencé à avertir que JCenter is at end of life

enter image description here

Mais je ne peux pas supprimer jcenter() puisqu'il héberge de nombreux artefacts Android, cela conduirait à des déclarations de Could not resolve all artifacts erreur. Quelle est la bonne façon de résoudre cet avertissement ?

111voto

Valeriy Katkov Points 546

Une section de la documentation décrit le problème : Dépréciation et fin de service du JCenter . Vous trouverez le lien en développant la description de l'inspection ( Ctrl+F1 ). La documentation indique :

JFrog, la société qui gère le référentiel d'artefacts JCenter utilisé par de nombreux projets Android, a récemment annoncé la dépréciation et le retrait prochain de JCenter. D'après l'annonce , JCenter permettra le téléchargement d'artefacts existants jusqu'au 1er février 2022.

Les développeurs qui publient des artefacts sur JCenter doivent commencer à migrer leurs paquets vers un nouvel hôte, tel que comme Maven Central .

Dans un futur proche, nous fournirons des informations supplémentaires sur la migration des projets Android hors de la plateforme JCenter sur cette page.

La description étendue de l'inspection (ainsi que la documentation ci-dessus) suggère de remplacer les éléments suivants jcenter() par mavenCentral() . Acuellement JCenter est un surensemble de Maven Central mais ce remplacement ne résoudra pas le problème tant que tous les pays de l'UE ne se seront pas mis d'accord sur une solution de remplacement. JCenter Les artefacts utilisés par votre projet seront déplacés vers Maven Central .

Je pense que la meilleure solution serait d'attendre que les bibliothèques que vous utilisez soient déplacées de jcenter() et essayer de le remplacer par mavenCentral() . Si certains artefacts sont toujours manquants, jetez un coup d'œil à la documentation, il se peut qu'ils aient été déplacés dans un autre référentiel et que vous deviez l'ajouter au référentiel repositories également la liste de la Commission.

repositories {
    google()

//  jcenter()       // <- removed
    mavenCentral()  // <- added
}

Si vous êtes un auteur de bibliothèque, vous devriez migrer vers un autre repo, probablement celui de Maven Central . Il convient de noter que, selon le JCenter Annonce de dépréciation les nouvelles soumissions ne sont autorisées que jusqu'au 31 mars 2021.

Quelques ressources connexes :

41voto

Ivan Bila Points 474

Je pense que pour respecter une migration sans rupture, au lieu de supprimer l'élément jcenter() Vous pouvez conserver les deux et ne modifier l'ordre que dans le script lui-même. De cette manière, jcenter() sera toujours une solution de repli par rapport à mavenCentral() alors que les développeurs sont en train de migrer leurs artefacts.

repositories {
    google()
    mavenCentral()  
    jcenter()       
}

1 votes

Est-il possible que quelques mois/années plus tard, une application non mise à jour utilisant jcenter() plante soudainement pour tous les utilisateurs un jour où jcenter() est "terminé" ou "déprécié" ? ou que l'ancienne application continue de fonctionner ?

5 votes

À partir du 1er février 2022 jcenter se fonctionner indéfiniment comme un dépôt en lecture seule Ce qui signifie que les développeurs ne pourront pas envoyer de nouvelles mises à jour, votre application fonctionnera à moins que vous n'ajoutiez de nouvelles versions d'une bibliothèque qui n'est pas disponible sur jcenter

0 votes

Je pense que cela ne résout rien, si jcenter ne trouve pas la version alors il continuera simplement à chercher dans mavenCentral.

2voto

P R Points 95

Trouvez les lignes qui disent jcenter() et ajoutez mavenCentral() avant chacune d'entre elles (Assurez-vous d'ajouter mavenCenteral() aux deux endroits où se trouve jcenter()).

Ajouter Maven Central avant JCenter signifie que Maven Central sera utilisé par défaut, et JCenter sera toujours utilisé comme solution de repli.

Si vous tentez de supprimer complètement jcenter() aujourd'hui de votre projet Android, vous risquez d'obtenir l'erreur suivante.

> Could not resolve all artifacts for configuration ':classpath'.
   > Could not find org.jetbrains.trove4j:trove4j:20160824.
     Searched in the following locations:
       - https://dl.google.com/dl/android/maven2/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
       - https://repo.maven.apache.org/maven2/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
     Required by:
         project : > com.android.tools.build:gradle:4.1.2 > com.android.tools.build:builder:4.1.2 > com.android.tools:sdk-common:27.1.2

La raison de cette erreur est que la dépendance Android Core nécessite toujours JCenter.

Android Studio 4.1.2 et AGP (Android Gradle Plugin) nécessitent encore une version d'une dépendance (trove4j) qui n'existe que sur JCenter.

Ce problème est résolu dans AGP 4.2.0, mais il s'agit encore d'une version bêta qui nécessite Android Studio 4.2 bêta ou une version plus récente.

1voto

user_MGU Points 772

Ne vous pressez pas ! Il ne faut rien faire tant que les développeurs d'Android Studio n'auront pas mis au point une solution automatique adéquate pour cette situation.

-1voto

NSV. Points 1

Attendez. Laissez le JCenter arriver en fin de service. Ensuite, sortez le nouveau dépôt. Il est possible d'ignorer totalement les avertissements.

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