Parsing della riga di comando in Java con Apache Commons CLI

Mattepuffo's logo
Parsing della riga di comando in Java con Apache Commons CLI

Parsing della riga di comando in Java con Apache Commons CLI

Tra le varie librerie Apache Commons, ne troviamo una apposita per il parsing degli argomenti da riga di comando: Apache Commons CLI!

Oggi vediamo un esempio del suo utilizzo.

Se usate Maven potete installare la libreria in questo modo:

        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>1.4</version>
        </dependency>

Bene, iniziamo con una semplice classe che esegue il parsing:

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;

public class Cli {

    private String[] args;
    private Options options;

    public Cli(String[] args) {
        this.args = args;
        options = new Options();
        options.addOption("h", "help", false, "Mostra l'help");
        options.addOption("n", "nome", true, "Nome");
    }

    public void parseCli() throws ParseException {
        CommandLineParser parser = new DefaultParser();
        CommandLine cl = parser.parse(options, args);
        if (cl.hasOption("h")) {
            help();
        }
        if (cl.hasOption("n")) {
            System.out.println(cl.getOptionValue("n"));
        } else {
            help();
        }
    }

    private void help() {
        HelpFormatter hf = new HelpFormatter();
        hf.printHelp("Main", options);
        System.exit(0);
    }
}

Abbiamo creato due opzioni, di cui una per l'help.

Per mostrare l'help abbiamo creato un metodo apposito, che viene richiamato sia in caso in cui venga impostata l'opzione -h, si nel caso in cui non venga passato nessun parametro.

Al posto del metodo addOption potremmo anche usare addRequiredOption, che in pratica rende l'opzione obbligatoria:

options.addRequiredOption("n", "nome", true, "Nome");

A questo punto vediamo un esempio di utilizzo:

import org.apache.commons.cli.ParseException;

public class Main {

    public static void main(String[] args) {
//        String[] testArgs = {"-n", "Matteo"};
//        String[] testArgs = {"-n", "Matteo"};
        String[] testArgs = {""};
        Cli cli = new Cli(testArgs);
        try {
            cli.parseCli();
        } catch (ParseException ex) {
            System.out.println(ex.getMessage());
        }
    }
}

Provate usando tutte e tre le variabili testArgs, in modo da verificare il comportamento.

Enjoy!


Condividi

Commentami!