Eine API, die Befehlszeilenoptionen analysiert.
Angenommen, Sie haben drei Optionen, wenn Sie hoge.jar ausführen. java -jar /usr/local/hoge.jar user age mail
Und von diesen ・ Der Benutzer möchte zwei Optionen auswählen ・ Ich möchte das Alter verbindlich machen -Wenn die Option falsch ist, möchte ich die angegebenen Optionsinformationen zurückgeben (Hilfe).
Die API, die die Anfrage beantwortet, ist Apache Commons CLI.
Ich habe es in der folgenden Umgebung eingeführt. -Java 1.8 ・ Maven-Konfiguration
pom.xml
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.4</version>
</dependency>
main.java
//Festlegen von Befehlszeilenoptionen
Options options = new Options();
//Einstellmethode 1
//Argumentname(-t),Ob man das Argument bekommt,Erläuterung
options.addOption("m", true, "Mail Adresse");
//Einstellmethode 2
//Legen Sie Optionen für jedes Argument fest
Options.addOption(Option.builder("u") //Optionsname
.argName("serviceid")) //Argumentname
.hasArg(2) //Nimmt zwei Argumente.
.desc("Nutzer") //Erläuterung
.build()); //Erstellen Sie eine Instanz
Options.addOption(Option.builder("a")
.argName("age"))
.required() //Verpflichtend
.hasArg()
.desc("Alter")
.build());
//Optionale Hilfeinformationen anzeigen.
HelpFormatter hf = new HelpFormatter();
hf.printHelp("[opts]", options);
//Befehlszeilenanalyse
CommandLineParser parser = new DefaultParser();
CommandLine cmd = null;
try {
cmd = parser.parse(options, args);
} catch (ParseException e) {
log.error("cmd parser failed." , e);
}
//Nutzer
cmd.hasOption("u");
log.info("Nutzer["+String.join(",", cmd.getOptionValues("u"))+"]");
//Alter
cmd.hasOption("a");
log.info("Alter["+String.join(",", cmd.getOptionValues("a"))+"]");
//Mail Adresse
cmd.hasOption("m");
log.info("Mail Adresse["+String.join(",", cmd.getOptionValues("m"))+"]");
Versuchen Sie es mit den folgenden Argumenten. -a 18 -u edy jeff -m [email protected]
console.log
usage: [opts]
-a <age>Alter
-m <arg>Mail Adresse
-u <user>Nutzer
INFO App -Nutzer[edy,jeff](App.java:67)
INFO App -Alter[18](App.java:71)
INFO App -Mail Adresse[[email protected]](App.java:75)
Optionsinformationen werden ebenfalls angezeigt, und Sie können sehen, dass das angegebene Argument erfasst wurde.
Übrigens, wenn Sie das Alter der gewünschten Artikel entfernen
console.log
usage: [opts]
-a <age>Alter
-m <arg>Mail Adresse
-u <user>Nutzer
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)
Es wird ausgegeben, dass es keine "a" -Option gibt.
Ich wollte eine solche API, wenn ich einen Stapel erstelle, also werde ich sie ab dem nächsten Mal verwenden. Es ist neu, aber (* ´Д `)
Die Verwendung von OptionBuilder ist seit Commons CLI 1.3 veraltet. Aus diesem Grund wurde auch der Quellteil geändert.
OptionBuilder.withArgName("user").
hasArgs(2).
withDescription("Nutzer").
create("u");
Verwenden Sie stattdessen Option.builder.
Option.builder("u")
.argName("user"))
.hasArgs(2)
.desc("Nutzer")
.build()