[JAVA] Effectuez une analyse des options de ligne de commande avec la CLI Commons d'Apache.

Qu'est-ce que la CLI Apache Commons?

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.

Essayez d'introduire

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

20190218 Addendum

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

Recommended Posts

Effectuez une analyse des options de ligne de commande avec la CLI Commons d'Apache.
Créer une application en ligne de commande avec maven