O JBang é uma aplicação que permite executar códigos em Java sem a necessidade de compilar diretamente o código e/ou criar projetos usando Maven ou Gradle. Simplificando, o JBang traz para o Java a agilidade dos scripts em Shell ou Python com o poder e a flexibilidade do Java.
O JBang pode ser instalado facilmente usando o SDKman!:
sdk install jbang
Uma vez instalado, você pode gerar um projeto a partir de um template padrão:
jbang init -t cli hello.java
Como resultado desse comando, ele irá criar um arquivo hello.java com um conteúdo parecido com o seguinte:
///usr/bin/env jbang "$0" "$@" ; exit $?
//DEPS info.picocli:picocli:4.5.0
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Parameters;
import java.util.concurrent.Callable;
@Command(name = "hello", mixinStandardHelpOptions = true, version = "hello 0.1",
description = "hello made with jbang")
class hello implements Callable<Integer> {
@Parameters(index = "0", description = "The greeting to print", defaultValue = "World!")
private String greeting;
public static void main(String... args) {
int exitCode = new CommandLine(new hello()).execute(args);
System.exit(exitCode);
}
@Override
public Integer call() throws Exception { // your business logic goes here...
System.out.println("Hello " + greeting);
return 0;
}
}
Algumas particularidades interessantes do arquivo acima:
//DEPS org.grupo:dependencia:${dependencia.versao}
O JBang permite gerenciar dependências de diversas maneiras, a mais comum sendo através desse tipo de linha de configuração (modeline) precedida por //DEPS
.
As dependências são referenciadas através da nomenclatura GAV (grupo, artefato, versão) no formato: G:A:V. Além disso é possível tanto usar BOM POMs para facilitar o gerenciamento de versões quanto trocar a versões fixas no código por propriedades que podem ser passadas por linha de comando:
//DEPS org.grupo:dependencia:${dependencia.versao}
Tornando possível executar o projeto usando algo semelhante ao seguinte:
jbang -Ddependencia.versao=2.0.1
Outra particularidade muito interessante do JBang é o uso do projeto PicoCLI para o gerenciamento das opções de linha de comando, o que permite tornar o script bastante flexível de maneira bastante elegante e direta.
Para executar esse arquivo você pode rodar:
./hello.java
ou
jbang run hello.java
Ao executar qualquer um dos comandos acima, temos o resultado esperado que é a impressão da famosa mensagem “Hello World”. E claro, também podemos brincar com a PicoCLI para mudar parte da mensagem:
jbang run hello.java --gretting Mundo!
Hello Mundo!
Obviamente essa é só uma introdução bastante simples sobre o JBang. A capacidade de utilizar as inúmeras bibliotecas reutilizáveis que temos disponíveis em Java, torna o projeto bastante interessante para desenvolvedores com a necessidade de automatizar tarefas e que, talvez, não se sintam confortáveis com Shell Scripts. Além disso pode ser uma plataforma extremamente interessante para desenvolvedores iniciantes, pois remove a necessidade de gerenciar os projetos com Maven ou Gradle.