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!
java apache apache commons apache commons cli commandlineparser
Commentami!