Cloud Intelligence™Cloud Intelligence™

Cloud Intelligence™

Kotlin, Gradle et le cloud

By Joshua FoxFeb 22, 20214 min read

Cette page est également disponible en English, Deutsch, Español, Italiano, 日本語 et Português.

Il a été conçu avec toutes les fonctionnalités d'un langage de programmation moderne que Java acquiert peu à peu, mais qui ne peuvent pas être entièrement rétroportées, notamment :

  • L'inférence de types
  • Les lambdas
  • Le pattern matching
  • Les fonctions hors méthode
  • La null safety
  • Les smart casts
  • …et bien d'autres encore.

Kotlin interopère facilement avec Java, ce qui donne accès à un vaste choix de bibliothèques pour un coût de transition minimal.

Bien que Kotlin soit surtout connu comme langage officiel pour Android, c'est un langage généraliste, et j'étais curieux de l'utiliser dans le cloud — dans un conteneur Docker, bien sûr. J'ai donc décidé de tenter l'expérience, en m'appuyant sur mon expérience Java.

Bien que je maîtrise mieux Maven comme outil de gestion des dépendances et de build pour le code Java, je me suis aussi mis à Gradle, légèrement préféré à Maven pour le build d'applications Kotlin.

Lisez la suite pour découvrir comment procéder.

Nuages au-dessus de l'île de Kotlin

Instructions

  • Installez Docker.
  • Installez Gradle. Le gestionnaire de paquets de votre OS s'en chargera : sur Mac, un simple brew install suffit.
  • À partir d'ici, n'hésitez pas à copier mon projet et à partir de là. Sinon, suivez les étapes ci-dessous.
  • Configurez votre projet Gradle/Kotlin. Ce guide côté Kotlin est utile, tout comme celui-ci côté Gradle. Je les combine ici pour expliquer comment mettre en place une nouvelle application le plus simplement possible.
  • Créez votre répertoire et placez-vous dedans. Par exemple, mkdir multicloud_pubsub && cd multicloud_pubsub.
  • Exécutez gradle init, puis saisissez ces valeurs dans les menus interactifs : 2 (application), 4 (Kotlin), 1 (non : un seul projet d'application), 1 (scripts de build en Groovy), Enter et Enter pour les noms par défaut du projet et du package source d'exemple.
  • Tapez gradle run pour obtenir un magnifique Hello World !
  • Pour ajouter votre propre code, inspirez-vous de mon projet d'exemple disponible ici sur Github — il s'agit d'une petite partie d'une application asynchrone conçue pour un découplage et une robustesse maximaux face à l'instabilité du cloud. Je prévois de consacrer prochainement un article à ce sujet.
  • Placez votre code dans un sous-répertoire basé sur le package, sous src/main/kotlin, et supprimez le code d'exemple dans src/main/kotlin et src/test/kotlin.
  • Supprimez l'exemple guava dans build.gradle, et ajoutez vos dépendances. Ce sont les mêmes identifiants d'artefacts que dans Maven, avec une syntaxe plus lisible.
compile 'com.google.cloud:google-cloud-pubsub:1.42.0'
compile 'com.google.cloud:google-cloud-storage:1.42.0'
compile 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
  • Modifiez la mainClass dans build.gradle, ici 'com.doitintl.mulicloud.ProcessorKt'. Notez le suffixe Kt sur le nom de fichier, qui désigne une classe synthétique donnant accès à la fonction main.
  • Ajoutez ce qui suit à la fin de build.gradle. Cela permet de produire un fichier jar tout-en-un utilisable avec java -jar app.jar.
jar {
    manifest { attributes 'Main-Class': mainClass }
    from { configurations.implementation.collect {
          it.isDirectory() ? it : zipTree(it) } }
}
  • Vérifiez avec gradle clean run.
  • Et maintenant, direction le cloud ! Placez ce Dockerfile dans le répertoire.
  • Notez que nous utilisons une image Gradle distincte au moment du build, ce qui nous permet de disposer d'une image légère et épurée à l'exécution.
  • Nous nous appuyons sur l'image Java d'OpenJDK. La bibliothèque d'exécution standard de Kotlin est intégrée à l'application : aucune image Kotlin n'est donc nécessaire.
  • Construisez l'image. N'oubliez pas le point à la fin pour désigner le répertoire de build.
docker build -t pubsubapp .

Lancez-la maintenant.

docker run pubsubapp

Et voilà ! Les images Docker étant merveilleusement autonomes, les connaissances acquises sur des applications développées avec d'autres technologies s'appliqueront tout aussi bien à une application bâtie avec Kotlin et Gradle. Comme d'habitude, il reste quelques tâches à effectuer : créer des comptes de service, attribuer des rôles, etc. J'ai écrit un script à cet effet. (Voir le README.)