È nato con tutte le caratteristiche di un linguaggio di programmazione moderno che Java sta lentamente acquisendo, ma che non possono essere integrate completamente a posteriori, come ad esempio:
- Type inference
- Lambda
- Pattern matching
- Funzioni non legate a metodi
- Null safety
- Smart cast
- …e molto altro.
Kotlin si integra facilmente con Java, dando accesso a un'ampissima scelta di librerie con costi di transizione minimi.
Sebbene Kotlin sia noto soprattutto come linguaggio ufficiale di Android, è in realtà un linguaggio general-purpose, ed ero curioso di metterlo alla prova nel cloud — dentro un container Docker, ovviamente. Così ho deciso di provarci, sfruttando la mia esperienza con Java.
Pur avendo più dimestichezza con Maven per gestire le dipendenze e compilare codice Java, ho voluto imparare anche un po' di Gradle, dato che per le applicazioni Kotlin è leggermente preferito a Maven.
Continui a leggere per scoprire come fare.

Nuvole sopra l'isola di Kotlin
Istruzioni
- Installi Docker.
- Installi Gradle. Il package manager del suo sistema operativo le darà una mano: su Mac basta
brew install - Da qui in poi, può semplicemente copiare il mio piccolo progetto e partire da lì. Oppure seguire questi passaggi per arrivarci.
- Configuri il progetto Gradle/Kotlin. Questa guida sul versante Kotlin è utile, così come questa sul versante Gradle. Le metterò insieme spiegando come avviare una nuova app nel modo più semplice possibile.
- Crei la directory e ci si sposti dentro. Ad esempio,
mkdir multicloud_pubsub && cd multicloud_pubsub. - Esegua
gradle init, quindi selezioni queste opzioni nei menu interattivi: 2 (application), 4 (Kotlin), 1 (no: solo un progetto applicativo), 1 (script di build in Groovy),EnteredEnterper i nomi predefiniti del progetto e del sample source package. - Digiti
gradle runper ottenere uno splendido "Hello World!" - Per aggiungere il proprio codice, proceda come nel mio progetto di esempio disponibile qui su Github — è una piccola parte di un'app asincrona pensata per garantire il massimo disaccoppiamento e la massima robustezza di fronte all'instabilità del cloud. Conto di dedicargli presto un articolo a parte.
- Inserisca il codice in una sottodirectory basata sul package sotto
src/main/kotlin, ed elimini il codice di esempio insrc/main/kotlinesrc/test/kotlin. - Elimini il
guavadi esempio inbuild.gradlee aggiunga le proprie dipendenze. Sono gli stessi identificatori di artifact che si usano in Maven, ma con una sintassi più leggibile.
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'
- Modifichi
mainClassinbuild.gradle, in questo caso'com.doitintl.mulicloud.ProcessorKt'. Noti il suffissoKtnel nome del file, che indica una classe sintetica che dà accesso alla funzionemain. - Aggiunga quanto segue in coda a
build.gradle. Genera un file jar all-in-one utilizzabile conjava -jar app.jar
jar {
manifest { attributes 'Main-Class': mainClass }
from { configurations.implementation.collect {
it.isDirectory() ? it : zipTree(it) } }
}
- Lo verifichi con
gradle clean run. - E ora, in cloud! Inserisca questo
Dockerfilenella directory. - Da notare che in fase di build usiamo un'immagine Gradle separata, così a runtime possiamo affidarci a un'immagine leggera e pulita.
- Utilizziamo l'immagine Java di OpenJDK. La libreria runtime standard di Kotlin viene inclusa nell'applicazione durante la build, quindi non serve un'immagine Kotlin.
- Costruisca l'immagine. Non dimentichi il punto finale, che indica la directory di build.
docker build -t pubsubapp .
Ora la esegua.
docker run pubsubapp
Tutto qui! Dato che le immagini Docker sono splendidamente self-contained, le competenze maturate con app realizzate in qualunque altra tecnologia valgono allo stesso modo per una sviluppata con Kotlin e Gradle. Resta dell'altro da fare, come creare i service account e assegnare i ruoli, come sempre; ho preparato uno script apposito. (Consulti il README.)