I picked CLI at random out of a "what could I add to gwizard?" brainstorm. But, the more I thought about it... the less solid my use-case was.
In dropwizard's case... They support adding subcommands. For instance, you might run your server like:
java -jar myapp.jar server cfg.yml
there's a check subcommand that will run validation against the config, but not start your server
java -jar myapp.jar check cfg.yml
(and, you can't disable server or check. or easily extend those commands either... it was a pain.)
In my dropwizard-based project... We want to supply Guice Override Modules on the command-line. For example... we expose a bunch of data over JMX, and consume data from other services' REST endpoints. During Fitnesse tests, or manual dev testing, it's nice to be able to override the HTTP client binding so that rather than actually trying to hit those external services' REST endpoints, the HTTP GET responses can just be JSON from a config file.
Anyway... Right now, in my app's main() I pick apart the JVM CLI arguments between the ones for my app vs. the ones I'll pass along to Dropwizard. Seemed like the least awful option at the time. But it's fragile and ugly