Voici un exemple d'utilisation de son macro with-command-line
. Le code suivant spécifie une classe anodine avec une méthode principale qui ne fait rien d'autre que d'afficher les valeurs de ses arguments de ligne de commande.
(ns cmd-line-demo
(:gen-class)
(:use clojure.contrib.command-line))
(defn -main [& args]
(with-command-line args
"Démonstration de la ligne de commande"
[[foo "Ceci est la description de foo" 1]
[bar "Ceci est la description de bar" 2]
[boolean? b? "Il s'agit d'un indicateur booléen."]
remaining]
(println "foo: " foo)
(println "bar: " bar)
(println "boolean?: " boolean?)
(println "remaining: " remaining)))
Compiler la classe dans le REPL:
utilisateur> (compile 'cmd-line-demo)
cmd-line-demo
Exemple d'utilisation
1) Exécuter sans arguments de ligne de commande fera s'afficher les infos d'aide. Les infos d'aide peuvent aussi être affichées avec les indicateurs --help
ou -h
. Notez que les infos d'aide sont automatiquement générées à partir de votre cmdspec.
$ java -classpath . cmd_line_demo
Démonstration de la ligne de commande
Options
--foo Ceci est la description de foo [défaut 1]
--bar Ceci est la description de bar [défaut 2]
--boolean, -b Il s'agit d'un indicateur booléen.
2) Les arguments non spécifiés reçoivent la valeur par défaut spécifiée dans la liaison cmdspec. Par exemple, bar
a une valeur par défaut de 2
.
$ java -classpath . cmd_line_demo --foo "valeur changée"
foo: valeur changée
bar: 2
boolean?: nil
remaining: []
3) Les indicateurs booléens sont indiqués par le suffixe "?" dans le cmdspec. Notez que le drapeau lui-même n'inclut pas le "?" dans son nom.
$ java -classpath . cmd_line_demo -boolean
foo: 1
bar: 2
boolean?: true
remaining: []
4) Notez également que vous pouvez spécifier des alias de drapeaux en spécifiant plusieurs symboles dans le cmdspec. J'ai fait cela avec les drapeaux boolean?
et b?
.
5) Enfin, j'ai spécifié que remaining
capture tous les arguments restants sans drapeaux associés.
$ java -classpath . cmd_line_demo -foo test fichier1 fichier2 fichier3
foo: test
bar: 2
boolean?: nil
remaining: [fichier1 fichier2 fichier3]