import com.beust.jcommander.Parameter;
 
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")
  public String groups;
 
  @Parameter(names = "-debug", description = "Debug mode")
  public boolean debug = false;
}

Recently, I got tired of having to handle command line parsing manually. I took a look at existing frameworks and all the ones that I found (JOpts, JArgs, commons-cli) suffered from the same limitations that I was trying to avoid: they barely cut down on the boiler plate code and they are not very type safe.

So I came up with my own framework, which I called JCommander.

The snippet of code above should give you a pretty good idea of what JCommander looks like, and if you need more information, just head over to the main site. I have already integrated JCommander in TestNG and it has already reduced the code base to handle this simple task significantly.

Let me know what you think.