Programme java console (CLI)
Résolu
mikis69
Messages postés
174
Statut
Membre
-
mikis69 Messages postés 174 Statut Membre -
mikis69 Messages postés 174 Statut Membre -
Bonjour à tous et à toutes,
J'aimerai réaliser une application console en java et qui s'utilise comme une console windows par exemple (on lance l'application, on attend que l'utilisateur entre une commande jusqu'à ce qu'il écrive 'exit') comme git bash par exemple.
Le soucis est le suivant, je ne trouve rien sur internet dans ce style là, je trouve beaucoup de choses sur par exemple faire une application en console et comment gérer les paramètres lors du lancement de l'application. Mais ce n'est pas vraiment ce que je cherche, est-ce que quelqu'un connait une librairie sympas à utiliser ?
Ou alors peut m'orienter vers quelque chose qui me permettrait de commencer mon programme ?
En gros, j'aimerai faire un programme qui ressemble à ceci :
1. L'utilisateur lance l'application
2. L'application attend une entrée de l'utilisateur
3. L'utilisateur entre une commande (genre dans mon cas import -git "depotGit.git")
4. L'application vérifie que la commande entrée existe et est bien utilisée
5. L'application exécute la commande
6. L'utilisateur entre la commande 'exit'
7. L'application se ferme
Si aucune librairie n'existe, je pense pouvoir le faire 'à la main' mais je ne sais pas si c'est une bonne solution..
Je pensais mettre le tout dans un 'tant que l'utilisateur n'entre pas exit' lire les entrées de l'utilisateur; Découper les entrées pour récupérer les parties de l'entrée; Dans un switch, je vérifie si la commande est correcte et je lance les méthodes adéquates;
Merci pour votre temps et votre réponse,
Bonne nuit,
Mikis
J'aimerai réaliser une application console en java et qui s'utilise comme une console windows par exemple (on lance l'application, on attend que l'utilisateur entre une commande jusqu'à ce qu'il écrive 'exit') comme git bash par exemple.
Le soucis est le suivant, je ne trouve rien sur internet dans ce style là, je trouve beaucoup de choses sur par exemple faire une application en console et comment gérer les paramètres lors du lancement de l'application. Mais ce n'est pas vraiment ce que je cherche, est-ce que quelqu'un connait une librairie sympas à utiliser ?
Ou alors peut m'orienter vers quelque chose qui me permettrait de commencer mon programme ?
En gros, j'aimerai faire un programme qui ressemble à ceci :
1. L'utilisateur lance l'application
2. L'application attend une entrée de l'utilisateur
3. L'utilisateur entre une commande (genre dans mon cas import -git "depotGit.git")
4. L'application vérifie que la commande entrée existe et est bien utilisée
5. L'application exécute la commande
6. L'utilisateur entre la commande 'exit'
7. L'application se ferme
Si aucune librairie n'existe, je pense pouvoir le faire 'à la main' mais je ne sais pas si c'est une bonne solution..
Je pensais mettre le tout dans un 'tant que l'utilisateur n'entre pas exit' lire les entrées de l'utilisateur; Découper les entrées pour récupérer les parties de l'entrée; Dans un switch, je vérifie si la commande est correcte et je lance les méthodes adéquates;
Merci pour votre temps et votre réponse,
Bonne nuit,
Mikis
A voir également:
- Programme java console (CLI)
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
1 réponse
Bonjour,
Une petite recherche sur Google remonte très vite des résultats utiles.
Sur la première page de résultats on a déjà 4 librairies qui pourraient plus ou moins correspondre à ce que tu recherches...
https://commons.apache.org/proper/commons-cli/
https://pholser.github.io/jopt-simple/
http://jcommander.org/
http://args4j.kohsuke.org/
Une petite recherche sur Google remonte très vite des résultats utiles.
Sur la première page de résultats on a déjà 4 librairies qui pourraient plus ou moins correspondre à ce que tu recherches...
https://commons.apache.org/proper/commons-cli/
https://pholser.github.io/jopt-simple/
http://jcommander.org/
http://args4j.kohsuke.org/
Oui, je les ai déjà essayées mais elles ne correspondent pas à ce que je veux faire.. La plupart permettent de gérer les arguments passés lors du lancement du programme (d'après les exemples et les tests que j'ai fait).. J'ai également essayé de les modifier pour arriver à ce que je voulais mais je n'y suis pas arrivé. C'est pour cela que je suis venu demander de l'aide ici ! (J'avais évidemment déjà effectué mes recherches sur google)
Je ne sais pas vraiment quel terme recherché sur google pour ce que je veux, j'ai essayé console program like git bash par exemple (car je ne sais pas comment s'appelle ce que j'essaie de faire)
public static void main( String[] args ) { // create the parser CommandLineParser parser = new DefaultParser(); try { // parse the command line arguments CommandLine line = parser.parse( options, args ); } catch( ParseException exp ) { // oops, something went wrong System.err.println( "Parsing failed. Reason: " + exp.getMessage() ); } }A priori il devrait être facile de l'adapter pour lire une commande tapée au clavier.
public static void exec(String command) { // split the command String[] args = command.split("\\s"); // create the parser CommandLineParser parser = new DefaultParser(); try { // parse the command line arguments CommandLine line = parser.parse( options, args ); } catch( ParseException exp ) { // oops, something went wrong System.err.println( "Parsing failed. Reason: " + exp.getMessage() ); } }Attention, il y a des cas particuliers où il ne faut pas splitter sur l'espace.
Par exemple lorsque l'on met des guillemets, devrait être splitté en
{"tata", "-toto", "titi tutu"}alors que monsplit("\\s")donnera{"tata", "-toto", "titi", "tutu"}, mais ce n'est pas trop dur à contourner.Dans mon programme par exemple, on pourrait entrer la commande import mais après, il faudrait lui donner un type : "git" ou "local' ensuite suivant ce type, il y aurait d'autres paramètre à donner : l"url pour git, le chemin accès pour local.
Et ici avec cette librairie, je ne trouve pas le moyen de définir les options de manière précise, avec les arguments qui doivent être vérifiés etc..
Par exemple, je peux utiliser la classe Option
Option import = new Option("import", true, "Importer mais de quelle facon ?");Mais ca ne vérifiera pas ce qui suit import
Exemple :
import org.apache.commons.cli.*; public class Test { public static Options buildOptions() { Options options = new Options(); options.addOption(new Option("import", true, "Importer mais de quelle facon ?")); return options; } public static CommandLine exec(Options options, String... commands) throws ParseException { return new DefaultParser().parse(options, commands); } public static void main(String... args) throws ParseException { CommandLine commandLine = exec(buildOptions(), "git", "-import", "fichier"); System.out.println(commandLine.getOptionValue("import")); // fichier } }Maintenant pour être franc (et sans mauvaise volonté car j'ai cherché une bonne partie de la journée), je ne vois vraiment pas comment utiliser ces options.
Par exemple lorsque mon programme est lancé, je peux entrer ceci comme commande :
-git "url.git" -d ou cette commande -git "url.git"
Et je ne vois pas comment je peux dire que le -d n'est pas obligatoire et qu'en plus il ne peut être utilisé qu'avec la commande -git (car ca n'aurait pas de sens de l'utiliser avec -local par exemple). Je ne trouve rien sur le fait de lier plusieurs options entre elles.
Car avec ce que je vois pour l'instant l'utilisateur pourrait très bien faire -d tout seul aussi..
Et donc ce ne serait pas cohérent car concrétement mon programme aura quelques commandes du style : import, tokenize, help, exit (voilà les seuls commandes que l'utilisateur peut entrer).
S'il entre import, il va devoir passer des arguments à côté du style -git ou -local (+ les paramètres qui vont avec)
Mais rien n'empechera ici l'utilisateur de carrément entrer -import -git -local..
Je vais devoir vérifier les entrées de l'utilisateur dans un switch ? Car si c'est le cas, c'est pas très utile d'utiliser cette librairie, si ?
Fin je ne sais pas si je suis clair sur mes besoins.. Si ca ne l'est pas, n'hésite pas à me le dire afin que je réexplique.
Merci en tout cas !