Une API qui analyse les options de ligne de commande.
Par exemple, supposons que vous ayez trois options lors de l'exécution de hoge.jar. java -jar /usr/local/hoge.jar user age mail
Et de ces ・ L'utilisateur souhaite prendre deux options ・ Je veux rendre l'âge obligatoire -Si l'option est incorrecte, je souhaite renvoyer les informations d'option spécifiées (aide).
L'API qui répond à la demande est Apache Commons CLI.
Je l'ai introduit dans l'environnement suivant. -Java 1.8 ・ Configuration Maven
pom.xml
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.4</version>
</dependency>
main.java
//Définition des options de ligne de commande
Options options = new Options();
//Méthode de réglage 1
//Nom de l'argument(-t),S'il faut obtenir l'argument,La description
options.addOption("m", true, "adresse mail");
//Méthode de réglage 2
//Définir les options pour chaque argument
Options.addOption(Option.builder("u") //Nom de l'option
.argName("serviceid")) //Nom de l'argument
.hasArg(2) //Prend deux arguments.
.desc("utilisateur") //La description
.build()); //Créer une instance
Options.addOption(Option.builder("a")
.argName("age"))
.required() //Obligatoire
.hasArg()
.desc("âge")
.build());
//Afficher les informations d'aide facultatives.
HelpFormatter hf = new HelpFormatter();
hf.printHelp("[opts]", options);
//Analyse de la ligne de commande
CommandLineParser parser = new DefaultParser();
CommandLine cmd = null;
try {
cmd = parser.parse(options, args);
} catch (ParseException e) {
log.error("cmd parser failed." , e);
}
//utilisateur
cmd.hasOption("u");
log.info("utilisateur["+String.join(",", cmd.getOptionValues("u"))+"]");
//âge
cmd.hasOption("a");
log.info("âge["+String.join(",", cmd.getOptionValues("a"))+"]");
//adresse mail
cmd.hasOption("m");
log.info("adresse mail["+String.join(",", cmd.getOptionValues("m"))+"]");
Essayez de l'exécuter avec les arguments suivants. -a 18 -u edy jeff -m [email protected]
console.log
usage: [opts]
-a <age>âge
-m <arg>adresse mail
-u <user>utilisateur
INFO App -utilisateur[edy,jeff](App.java:67)
INFO App -âge[18](App.java:71)
INFO App -adresse mail[[email protected]](App.java:75)
Les informations sur les options sont également affichées et vous pouvez voir que l'argument spécifié a été acquis.
À propos, si vous supprimez l'âge des éléments requis
console.log
usage: [opts]
-a <age>âge
-m <arg>adresse mail
-u <user>utilisateur
ERROR App - cmd parser failed. (App.java:62)
org.apache.commons.cli.MissingOptionException: Missing required option: a
at org.apache.commons.cli.DefaultParser.checkRequiredOptions(DefaultParser.java:199)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:130)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:76)
at org.apache.commons.cli.DefaultParser.parse(DefaultParser.java:60)
at free_dom.test.App.main(App.java:60)
Exception in thread "main" java.lang.NullPointerException
at free_dom.test.App.main(App.java:66)
Il indique qu'il n'y a pas d'option "a".
Je voulais une telle API lors de la création d'un lot, je vais donc l'utiliser la prochaine fois. C'est nouveau, mais (* ´Д `)
L'utilisation d'OptionBuilder est obsolète depuis Commons CLI 1.3. Pour cette raison, la partie source a également été modifiée.
OptionBuilder.withArgName("user").
hasArgs(2).
withDescription("utilisateur").
create("u");
Utilisez plutôt Option.builder.
Option.builder("u")
.argName("user"))
.hasArgs(2)
.desc("utilisateur")
.build()