Foi criado com todos os recursos de uma linguagem de programação moderna que o Java vem incorporando aos poucos, mas que não dá para adaptar por completo, como:
- Inferência de tipos
- Lambdas
- Pattern matching
- Funções fora de métodos
- Null safety
- Smart casts
- …e muito mais.
O Kotlin tem interoperabilidade fácil com Java, o que dá acesso a uma enorme variedade de bibliotecas com custo de transição mínimo.
Embora o Kotlin seja mais conhecido como linguagem oficial do Android, ele é uma linguagem de propósito geral, e fiquei curioso para usá-lo na nuvem — em um container Docker, claro. Então resolvi testar, aproveitando minha bagagem em Java.
Apesar de ter mais experiência com o Maven como ferramenta para gerenciar dependências e fazer build de código Java, também resolvi aprender um pouco de Gradle, já que ele é ligeiramente preferido em relação ao Maven para o build de aplicações Kotlin.
Continue lendo para ver como fazer isso na prática.

Nuvens sobre a Ilha de Kotlin
Instruções
- Instale o Docker.
- Instale o Gradle. O gerenciador de pacotes do seu sistema operacional resolve isso pra você: no Mac, basta um
brew install - A partir daqui, fique à vontade para simplesmente copiar meu projeto simples e partir dele. Ou siga estes passos para chegar lá.
- Configure seu projeto Gradle/Kotlin. Este guia pelo lado do Kotlin é útil, assim como este pelo lado do Gradle. Vou juntar os dois e mostrar como configurar uma nova aplicação da forma mais fácil possível.
- Crie o diretório e entre nele. Por exemplo,
mkdir multicloud_pubsub && cd multicloud_pubsub. - Execute
gradle inite, em seguida, informe o seguinte nos menus interativos: 2 (application), 4 (Kotlin), 1 (no: only one application project), 1 (build scripts in Groovy),EntereEnterpara os nomes padrão do projeto e do pacote de exemplo. - Digite
gradle runpara ver um lindo "Hello World!" - Para adicionar seu próprio código, siga como no meu projeto de exemplo aqui no GitHub — que é uma pequena parte de uma aplicação assíncrona pensada para o máximo desacoplamento e robustez diante da instabilidade da nuvem. Pretendo escrever um artigo separado sobre isso em breve.
- Coloque o código em um subdiretório baseado em pacote dentro de
src/main/kotline apague o código de exemplo emsrc/main/kotlinesrc/test/kotlin. - Apague o exemplo do
guavaembuild.gradlee adicione suas dependências. São os mesmos identificadores de artefato usados no Maven, só que com uma sintaxe mais legível.
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'
- Edite o
mainClassembuild.gradle, neste caso'com.doitintl.mulicloud.ProcessorKt'. Repare no sufixoKtno nome do arquivo, que corresponde a uma classe sintética que dá acesso à funçãomain. - Adicione o seguinte ao final do
build.gradle. Isso gera um arquivo jar completo, pronto para ser usado comjava -jar app.jar
jar {
manifest { attributes 'Main-Class': mainClass }
from { configurations.implementation.collect {
it.isDirectory() ? it : zipTree(it) } }
}
- Teste com
gradle clean run. - Agora, rumo à nuvem! Coloque este
Dockerfileno diretório. - Repare que usamos uma imagem separada do Gradle em tempo de build, o que permite usar uma imagem leve e enxuta em tempo de execução.
- Usamos a imagem Java do OpenJDK. A biblioteca runtime padrão do Kotlin já vem embutida no build da aplicação, então não é preciso uma imagem do Kotlin.
- Faça o build da imagem. Não esqueça do ponto no final, que indica o diretório de build.
docker build -t pubsubapp .
Agora execute.
docker run pubsubapp
É isso! Como as imagens Docker são maravilhosamente autocontidas, todo o conhecimento que você adquiriu com aplicações construídas em outras tecnologias se aplica igualmente a uma feita com Kotlin e Gradle. Ainda tem coisa para fazer, como criar contas de serviço e conceder papéis, como de costume; criei um script para isso. (Veja o README.)