Clikt: Poderoso framework CLI para Kotlin com sintaxe declarativa

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Clikt: Poderoso framework CLI para Kotlin



Clikt é um framework moderno e leve para criar aplicações de console (CLI) na linguagem Kotlin. Ao contrário de muitas outras bibliotecas, o Clikt utiliza uma abordagem declarativa, permitindo descrever a estrutura dos comandos e seus parâmetros com anotações simples e expressões lambda. Isso torna o código limpo, legível e fácil de manter. A biblioteca é ideal tanto para pequenas utilidades quanto para interfaces de linha de comando complexas e multinível.



Principais recursos do Clikt



  • Sintaxe declarativa: Definição de comandos, opções e argumentos através de DSL (Domain Specific Language) ou anotações.
  • Geração automática de ajuda: O Clikt cria automaticamente uma mensagem --help bonita e estruturada com base nas suas definições.
  • Suporte a comandos aninhados: Crie hierarquias de comandos (por exemplo, git commit, git push) com um mecanismo simples de subcomandos.
  • Validação de valores: Mecanismos integrados para verificar tipos, intervalos, formatos e condições personalizadas.
  • Autocompletar: Suporte nativo para geração de scripts de autocompletar para Bash, Zsh e Fish.
  • Testabilidade: Ferramentas convenientes para testar aplicações CLI sem execução real no terminal.


Instalação e configuração



Para começar, adicione a dependência ao seu build.gradle.kts:



repositories {    mavenCentral()}

dependencies { implementation("com.github.ajalt.clikt:clikt:4.4.0")}


Para Maven, use:



<dependency>    <groupId>com.github.ajalt.clikt</groupId>    <artifactId>clikt</artifactId>    <version>4.4.0</version></dependency>


Exemplo básico: saudação



Vamos criar um comando simples que recebe um nome de usuário e uma flag opcional para saudar em diferentes idiomas.



import com.github.ajalt.clikt.core.CliktCommandimport com.github.ajalt.clikt.parameters.arguments.argumentimport com.github.ajalt.clikt.parameters.options.flagimport com.github.ajalt.clikt.parameters.options.option

class Greet : CliktCommand() { val name: String by argument(help = "Nome do usuário") val formal: Boolean by option("--formal", "-f", help = "Saudação formal").flag()

override fun run() { val greeting = if (formal) "Olá" else "Oi" echo("$greeting, $name!") }}

fun main(args: Array<String>) = Greet().main(args)


Execução a partir da linha de comando:



$ kotlin greet.kts JoãoOi, João!

$ kotlin greet.kts --formal JoãoOlá, João!

$ kotlin greet.kts --helpUsage: greet [<options>] <name>

Nome do usuário

Options: -f, --formal Saudação formal -h, --help Show this message and exit


Exemplo avançado: trabalho com arquivos e subcomandos



Vamos considerar um cenário mais complexo — uma utilidade para trabalhar com arquivos de texto com suporte aos subcomandos count e search.



import com.github.ajalt.clikt.core.CliktCommandimport com.github.ajalt.clikt.core.subcommandsimport com.github.ajalt.clikt.parameters.arguments.argumentimport com.github.ajalt.clikt.parameters.options.defaultimport com.github.ajalt.clikt.parameters.options.optionimport java.io.File

class FileTool : CliktCommand() { override fun run() = Unit // Comando raiz não faz nada}

class Count : CliktCommand(help = "Contar linhas no arquivo") { val file: File by argument(help = "Caminho para o arquivo") .validate { require(it.exists()) { "Arquivo não encontrado: $it" } }

override f

Recommendations