Thanks Remko, I will switch the import & yes I do :-)

On 24/05/2019 19:39, Remko Popma wrote:
The new CliBuilder annotations API works well for both the Commons CLI and the picocli implementation. (And I agree that the annotations API has some advantages over the previous DSL style, but that may be a matter of taste.)

Note that you can swap the implementation from Commons CLI to picocli by changing the import
from
import groovy.cli.commons.CliBuilder
to
import groovy.cli.picocli.CliBuilder
With the latter the usage help will show ANSI colors and gives some other features like the `cliBuilder.usageMessage <http://docs.groovy-lang.org/latest/html/gapi/groovy/cli/picocli/CliBuilder.html>` property to customize the usage help message.

Glad you like it! :-)


On Sat, May 25, 2019 at 2:11 AM MG <mg...@arscreat.com <mailto:mg...@arscreat.com>> wrote:

    Hi guys,

    just wanted to say that I recently had to revisit some older Groovy script 
code in my project, and I took the opportunity to switch the old CliBuilder 
implementation to the new Picocli based one 
(http://docs.groovy-lang.org/latest/html/gapi/groovy/cli/commons/CliBuilder.html
    ) - and I can just say that it is an absolute joy to work with: Concise, 
elegant, and type safe G-)


    import groovy.cli.commons.CliBuilder
    import groovy.cli.Option
    import groovy.cli.Unparsed

    // Alternative is to use an interface and let Groovy instantiate a class 
instance from it
    class MyOptions {
      boolean isTestRun
      @Option(shortName='h', description='output help info') Boolean help
      @Option(shortName='r', description='process regular entries') Boolean 
regular
      // etc (for supported types outside of Boolean see URL above)
      @Unparsed List remaining // all additional options given

      MyScriptOptions(boolean isTestRun) { this.isTestRun = isTestRun }
    }
    final cli = new CliBuilder(usage:'my_powerful_groovy_script')
    def opts = new MyOptions(true)
    cli.parseFromInstance(opts, args.split())  // From now on all cmd
    line params can be accessed in a type safe manner

    if(opts.help) {
      println cli.usage()
      System.exit(0)
    }

    if(opts.regular) {
      ...
    }

    Cheers,
    mg






Reply via email to