[JAVA] Führen Sie eine Befehlszeilenoptionsanalyse mit der Commons CLI von Apache durch.

Was ist Apache Commons CLI?

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.

Versuchen Sie sich vorzustellen

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 (* ´Д `)

20190218 Nachtrag

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()

Recommended Posts

Führen Sie eine Befehlszeilenoptionsanalyse mit der Commons CLI von Apache durch.
Erstellen Sie eine Befehlszeilen-App mit maven