Migration de JCenter vers mavenCentral

Migration de JCenter vers mavenCentral

En début d'année, JFrog a annoncé qu'ils allaient fermer le repository JCenter sur lequel était hébergée notre librairie de programmation, ainsi qu'un grand nombre d'autres librairies. Nous avons donc décidé de publier désormais notre librairie Android sous Maven Central Repository,
plus communément appelé mavenCentral. Si vous utilisiez notre libraire à l'aide de JCenter, cet article a pour but de vous aider à migrer vos projets sous le repository mavenCentral.



L'annonce de JFrog a surpris tout le monde. D'autant plus que le délai original avant la fermeture effective était très court, puisque JFrog prévoyait de tirer la prise des serveurs le 1er mai. Depuis, la société a précisé que le repository serait maintenu en lecture seule. C'est-à-dire que les scripts de build pourront télécharger les vieilles librairies, mais que les développeurs ne peuvent plus publier de mise à jour.

JCenter étant très populaire, cette décision a poussé de nombreux développeurs à chercher une alternative, et elle se nomme mavenCentral.

MavenCentral est un dépôt de libraires maven qui est supporté par gradle et Android Studio. Il est même automatiquement utilisé dans les nouveaux projets Android Studio. Il fonctionne de la même manière que JCenter: on spécifie le nom et la révision des librairies qui sont utilisées par l'application. Lors de la compilation, les librairies sont automatiquement téléchargées et ajoutées au binaire.

Migrer sous mavenCentral


Nous avons dû changer beaucoup de choses en interne pour migrer la librairie Yoctopuce sur mavenCentral, mais heureusement pour l'utilisateur de la libraire les choses sont beaucoup plus simples. En effet, en interne les deux repository utilisent maven, il faut donc simplement indiquer à gradle qu'il faut contacter le serveur de mavenCentral au lieu du serveur JCenter.

Pour ce faire, il faut simplement ajouter mavenCentral() dans votre fichier build.gradle. Attention à bien placer mavenCentral() avant JCenter afin que le script de build prenne bien en priorité les versions à jour sous mavenCentral().

...
allprojects {
  repositories {
    google()
    mavenCentral()
    jcenter()
    // leave reference to JCenter for old artefacts
    // that have not yet been migrate to mavenCentral
  }
}

...



Si vous utilisez Andoid Studio, il faut en plus forcer l'IDE à resynchroniser le fichier, en utilisant le bouton en haut à droite ou en redémarrant l'IDE.

La syntaxe pour ajouter une référence à la librairie Yoctopuce ne change pas (cf. plus bas). Lors de la prochaine compilation, Gradle va télécharger à nouveau la librairie Yoctopuce depuis mavenCentral et utiliser cette version.

Nouveaux projets


Les dernières versions d'Android Studio supportent déjà mavenCentral. En effet, si l'on regarde le fichier build.gradle généré par l'IDE lors de création d'un nouveau projet, on remarque que ce dernier contient déjà mavenCentral dans la liste des repository.

Le contenu du fichier build.gradle généré par Android Studio:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.2.1"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
        jcenter() // Warning: this repository is going to shut down soon
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}



Il faut ensuite ajouter une référence à "com.yoctopuce.android:YoctoLib" à la liste de dépendances pour que le projet soit compilé automatiquement avec la dernière version disponible de la libraire Yoctopuce pour Android.

Cette dépendance peut être ajoutée directement dans le fichier build.gradle de l'application dans la section "dependencies".

apply plugin: 'com.android.application'

android {
    compileSdkVersion 30
    buildToolsVersion '30.0.3'

    defaultConfig {
        applicationId "com.yoctopuce.examples.myapplication"
        minSdkVersion 15
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.yoctopuce.android:YoctoLib:+'
}



Mais il est aussi possible de passer par la fenêtre "Project Structure". Il faut sélectionner le module de l'application, ouvrir l'onglet "dependencies" et ajouter une dépendance "com.yoctopuce.android:YoctoLib:+". En cherchant "com.yoctopuce.android", le wizard va proposer la dernière version de la libraire publiée.

Attention à ne pas confondre la libraire "com.yoctopuce.android:YoctoLib" et "com.yoctopuce.java:yoctolib". La libraire "com.yoctopuce.java:yoctolib" est la librairie Yoctopuce pour Java pour les plateformes autres qu’Android. Si vous utilisez cette librairie, vous ne pourrez pas accéder aux modules branchés sur le port USB.

La fenêtre des dépendances dans Android Studio
La fenêtre des dépendances dans Android Studio



Conclusion


Voilà notre librairie de programmation pour Android est désormais disponible sur mavenCentral et il est de nouveau possible d'automatiser l'installation et l’utilisation de cette librairie.

Toutefois, cette mésaventure a révélé la face cachée de tous les repository de librairies. En effet, si les serveurs du repository tombent, cela peu casser la compilation d'un très grand nombre d'applications. Ce genre de problème n'est pas uniquement lié à Android. NPM a aussi eu des problèmes par le passé, et les mêmes problèmes pourraient arriver sur n'importe quel repository de packages.

C'est pour cette raison que toutes nos librairies sont aussi disponibles sur GitHub et directement sur notre site web. De cette manière, si mavenCentral décide subitement de fermer ses portes dans 5 ans, vous pourrez toujours télécharger les sources de la librairie et les ajouter à votre projet.


Commenter aucun commentaire Retour au blog












Yoctopuce, get your stuff connected.