BT

Diffuser les Connaissances et l'Innovation dans le Développement Logiciel d'Entreprise

Contribuez

Sujets

Sélectionner votre région

Accueil InfoQ Actualités Scripting En Java Avec JBang

Scripting En Java Avec JBang

Favoris

JBang fournit un moyen d'exécuter du code Java sous forme de script, similaire à JShell. Cependant, contrairement à JShell, JBang fonctionne très bien sur Java 8 et peut également être utilisé pour télécharger automatiquement des bibliothèques dépendantes. En fait, JBang peut même fonctionner sans que Java soit installé : il téléchargera simplement une JVM appropriée si nécessaire.

JBang est un launcher de script, écrit en Bash et Powershell, qui peut découvrir ou télécharger une JVM, puis charger (télécharger) le script Java passé en argument. L'implémentation de JBang est une archive Java JAR, qui est lancée pour exécuter d'autres commandes.

JBang peut exécuter des fichiers jsh ou java; ce dernier est une classe Java standard avec une méthode main(). Cependant, contrairement à JShell, les commentaires en haut de JBang permettent aux dépendances d'être automatiquement téléchargées et configurées dans le classpath. JShell permet d'ajouter des fichiers JAR au classpath au lancement, mais toutes les dépendances (récursives) doivent être ajoutées manuellement.

Par exemple, pour exécuter une application Java qui imprime du texte à l'aide de la dépendance (GPL) jfiglef, vous pouvez exécuter le script suivant avec JBang :


//usr/bin/env jbang "$0" "$@" ; exit $?
//DEPS com.github.lalyos:jfiglet:0.0.8
import com.github.lalyos.jfiglet.FigletFont;
class hello {
  public static void main(String... args) throws Exception {
    System.out.println(FigletFont.convertOneLine("Hello InfoQ"));
  }
}

Après avoir installé jbang avec sdkman ou en le téléchargeant, exécuter jbang run hello.java InfoQ affichera :


  _   _          _   _             ___            __            ___  
 | | | |   ___  | | | |   ___     |_ _|  _ __    / _|   ___    / _ \ 
 | |_| |  / _ \ | | | |  / _ \     | |  | '_ \  | |_   / _ \  | | | |
 |  _  | |  __/ | | | | | (_) |    | |  | | | | |  _| | (_) | | |_| |
 |_| |_|  \___| |_| |_|  \___/    |___| |_| |_| |_|    \___/   \__\_\

L'avantage d'utiliser jBang est qu'il téléchargera les dépendances en fonction du commentaire //DEPS en haut du fichier à partir du référentiel jcenter; il suivra ensuite les dépendances récursives pour s'assurer que tout ce qui est requis pour l'exécution se trouve dans le classpath. Cela permet aux applications plus complexes d'être scriptées à partir de la ligne de commande. En outre, les dépendances peuvent également être spécifiées en tant que liens directs vers les référentiels GitHub, soit en tant que branche, soit en tant que release tagguée. Pour les utilisations internes, il est possible de spécifier des référentiels supplémentaires à l'aide du commentaire //REPOS, tel que //REPOS mavenCentral,artifactory=https://example.com/repository

Plusieurs versions de Java sont prises en charge et peuvent être requises avec un commentaire //JAVA8 ou //JAVA11+ qui utilisera exactement Java 8 ou Java 11 et supérieur respectivement. Les JVM sont téléchargées à partir du site AdoptOpenJDK pour le système d'exploitation sur lequel la commande est exécutée. Entre autres choses, cela permet de tester très facilement des applications avec Java 11, 14, 15 etc. car le script jbang a une option --java qui permet l'exécution du script en utilisant la version spécifiée; ainsi vous pouvez exécuter jbang run --java 11 hello.java ou jbang run --java 14 hello.java pour exécuter le même script sous les deux versions de JVM.

Vous n'avez même pas besoin de faire extraire le script, car le code peut être téléchargé à partir d'une source distante. L'exécution de l'exemple ci-dessus peut être effectuée simplement en pointant sur l'URL contenant le script :


$ jbang run --java 15 https://github.com/jbangdev/jbang-replit-demo/blob/master/hello.java InfoQ
  _   _          _   _             ___            __            ___
| | | |   ___  | | | |   ___     |_ _|  _ __    / _|   ___    / _ \
| |_| |  / _ \ | | | |  / _ \     | |  | '_ \  | |_   / _ \  | | | |
|  _  | |  __/ | | | | | (_) |    | |  | | | | |  _| | (_) | | |_| |
|_| |_|  \___| |_| |_|  \___/    |___| |_| |_| |_|    \___/   \__\_\

Enfin, vous pouvez même exécuter jbang sans installer jbang : un script de lancement est disponible (sous la forme de scripts Bash et PowerShell) :


$ curl -Ls https://sh.jbang.dev | bash -s - https://github.com/jbangdev/jbang-replit-demo/blob/master/hello.java InfoQ

PS C:> iex "& { $(iwr https://ps.jbang.dev) } https://github.com/jbangdev/jbang-replit-demo/blob/master/hello.java InfoQ

Pour plus d'informations sur jbang, consultez sa page d'accueil à l'adresse https://jbang.dev ou le référentiel GitHub à l'adresse https://github.com/jbangdev/jbang.

 

Evaluer cet article

Pertinence
Style

Contenu Éducatif

BT