JCommander is a framework for parsing command-line arguments into Java objects using annotations. You define your command-line options as fields within a class and annotate them with @Parameter or @DynamicParameter.
To use it:
- Create a class containing fields annotated with
@Parameter (for fixed options) or @DynamicParameter (for key-value pairs). - Use
JCommander.newBuilder() to register your object via .addObject(yourObject). - Call
.build().parse(argv) where argv is your command-line string array.
public class JCommanderTest {
@Parameter
public List<String> parameters = Lists.newArrayList();
@Parameter(names = { "-log", "-verbose" }, description = "Level of verbosity")
public Integer verbose = 1;
@Parameter(names = "-groups", description = "Comma-separated list of group names to be run",
placeholder = "<group1>,<group2>...")
public String groups;
@Parameter(names = "-debug", description = "Debug mode")
public boolean debug = false;
@DynamicParameter(names = "-D", description = "Dynamic parameters go here")
public Map<String, String> dynamicParams = new HashMap<String, String>();
}
// Usage:
JCommanderTest jct = new JCommanderTest();
String[] argv = { "-log", "2", "-groups", "unit1,unit2,unit3",
"-debug", "-Doption=value", "a", "b", "c" };
JCommander.newBuilder()
.addObject(jct)
.build()
.parse(argv);