Skip to the content.

% Interactive Shell in Java

Interface Homme Machine

Les applications ont bien souvent une IHM, elle peut être de type GUI (Graphique) ou CLI (Texte).

En fait, CLI peut signifier trois niveau d’interface :

  1. L’interface de la ligne de commande, donc l’analyse des arguments passés à l’exécutable.
  2. L’interaction via une console (shell) intégrée dans l’application.
  3. L’affichage d’une interface utilisateur complète avec des bouton, menus, onglets, mais en mode texte (comme ncurses).

Arguments de la ligne de commande

Pour gérer les arguments de la ligne de commande, la plate-forme Java ne fournit aucune facilité à part un bricolage autour des classes InputStreamReader et BufferedReader.

Certaines applications utilisent l’astuce de l’option -Dproperty=value de la commande java pour récupérer des valeurs sans avoir à analyser les arguments de la ligne de commande.
http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html

Pour analyser les arguments de la ligne de commande, le développeur a deux possibilités. La première consiste à ne pas rajouter de dépendance à son projet et va se restreindre à une analyse basique des arguments de la ligne de commande en évitant de réinventer la roue. La seconde possibilité consiste à rajouter une des nombreuses bibliothèques disponibles :

Trois générations de bibliothèques :

  1. Parmi ces différentes bibliothèques, les plus anciennes miment le fonctionnement des bibliothèques des autres langages (c’est le cas de JArgs).
  2. D’autres bibliothèque profitent de la réflexion disponible dans le langage Java (selon le nom des variables membres ou des fonction).
  3. Enfin, d’autres bibliothèque tirent parti des annotations et nécessitent souvent une version de Java récente (Java 8).

Console interactive

La plate-forme Java fournit quelques classes de base comme java.io.Console (exemple) et java.util.Scanner (exemple 1 et 2).

Des bibliothèques permettent d’aller plus loin.

Cliche

En 2009, l’auteur Anton Grigoryev, a migré ce projet sur SourceForge. http://cliche.sourceforge.net/

En 2011, le projet est migré sur Google Code, site qui ferme en 2016.

Parmi les dépôts Git du présumé auteur sur GitHub, aucun projet nommé Cliche.

Par contre, de nombreuses personnes ont archivé ce projet sur GitHub avant la fermeture de Google Code, dont le projet le plus à jour et celui de Budhaditya :
https://github.com/budhash/cliche

Un article de 2015 explique comment l’utiliser :
https://opensourceforu.com/2015/09/cliche-speeding-up-command-line-interface-development/

JLine

En 2002, ce vieux projet débute sur SourceForge : http://jline.sourceforge.net/
dont sa dernière version était JLine-1.0 (avril 2011).

En 2009, le projet commence sa migration sur GitHub. : http://jline.github.io/jline2/
et délivre la série 2.x depuis novembre 2009 (version 2.0).
La dernière version de cette série est la 2.14.2 publiée en mai 2016.

En octobre 2016, une nouvelle série 3.x est publiée : https://github.com/jline/jline3/releases

Groovy utilise JLine pour son shell groovysh : http://groovy-lang.org/groovysh.html