Parsing della riga di comando in Java con Commandline

Mattepuffo's logo
Parsing della riga di comando in Java con Commandline

Parsing della riga di comando in Java con Commandline

Commandline è una delle tante librerie per Java per il parsing della riga di comando.

E' abbastanza semplice da usare, anche se al momento non rientra tra le mie preferite.

Vediamo un esempio in cui impostiamo due opzioni:

  • nome, di tipo stringa
  • vebosità, di tipo booleano

L'esempio è basico, e sul sito ci stanno diversi esempi avanzati.

Quello che non ho capito è come impostare una voce di help.

Comunque ecco qua:

import com.github.jankroken.commandline.CommandLineParser;
import com.github.jankroken.commandline.OptionStyle;
import com.github.jankroken.commandline.annotations.LongSwitch;
import com.github.jankroken.commandline.annotations.Option;
import com.github.jankroken.commandline.annotations.Required;
import com.github.jankroken.commandline.annotations.ShortSwitch;
import com.github.jankroken.commandline.annotations.SingleArgument;
import com.github.jankroken.commandline.annotations.Toggle;
import java.lang.reflect.InvocationTargetException;

public class Main {

    private boolean verbose;
    private String name;

    @Option
    @ShortSwitch("v")
    @LongSwitch("verbose")
    @Toggle(true)
    public void setVerbose(final boolean newVerbose) {
        verbose = newVerbose;
    }

    @Option
    @ShortSwitch("n")
    @LongSwitch("name")
    @SingleArgument
    @Required
    public void setName(String name) {
        this.name = name;
    }

    public static void main(String[] args) {
        try {
            String[] argument = {"-n", "Mattepuffo"};
//            String[] argument = {"-n", "Mattepuffo", "-v"};
            Main options = CommandLineParser.parse(Main.class, argument,
                    OptionStyle.LONG_OR_COMPACT);
            System.out.println("Il nome è: " + options.name);
            System.out.println("Controllo se scelta modalità verbosa: " 
                    + options.verbose);
        } catch (IllegalAccessException | 
                InstantiationException | 
                InvocationTargetException ex) {
            System.out.println(ex.getMessage());
        }
    }

Provate con entrambi gli argomenti (c'è una riga commentata) per vedere le differenze.

Se usate Maven, per usare la libreria inserite questo nel pom.xml:

        <dependency>
            <groupId>com.github.jankroken</groupId>
            <artifactId>commandline</artifactId>
            <version>1.7.0</version>
            <type>jar</type>
        </dependency>

Enjoy!


Condividi

Commentami!