JBang : exécuter du code Java comme un langage de script

Par:
fredericmazue

mar, 13/10/2020 - 16:01

JBang, dont le nom est sans doute un jeu de mot avec shebang, est un outil qui permet d'exécuter du code Java comme un langage de script.

En cela, JBang est similaire au JShell que fournit Oracle. Mais il vient avec des spécificités qui en font une alternative intéressante à JShell. Tout d'abord JBang est capable de fonctionner avec Java 8 tandis que JShell ne fonctionne qu'avec Java 9 et supérieur. Il est toutefois recommandé d'utiliser JBang avec Java 11 ou supérieur.

JBang est un script de lancement, écrit en bash et powershell, qui peut découvrir ou télécharger une JVM s'il n'y en a pas sur la machine. JBang peut exécuter des fichiers jsh ou java. Dans ce dernier cas, le fichier Java est une classe Java standard avec une  méthode main.

JBang permettent aux dépendances d'être automatiquement téléchargées et pointée par le classpath, là où JShell, s'il permet d'ajouter des fichiers JAR au classpath lors du lancement, nécessite que toutes les dépendances récursives soient ajoutées manuellement.

Les dépendances d'un script JBang sont déclarées par des commentaires spécifiques dans le code : //DEP. Par exemple comme ceci :

///usr/bin/env jbang "$0" "$@" ; exit $?
// (1)
//DEPS log4j:log4j:1.2.17

import static java.lang.System.out;
import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;
import java.util.Arrays;

class classpath_example {
           static final Logger logger = Logger.getLogger(classpath_example.class);

           public static void main(String[] args) {
                      BasicConfigurator.configure(); // (2)
                      logger.info("Welcome to jbang");

                      Arrays.asList(args).forEach(arg -> logger.warn("arg: " + arg));
                      logger.info("Hello from Java!");
           }
}

JBang est un logiciel libre sous licence MIT disponible sur GitHub.