And if anyone is interested to print the cliBuilder usage in the order that you added them, try
def cli = new CliBuilder(usage:'Blaa') cli.x(..) cli.a(..) cli.formatter.setOptionComparator({a,b -> 1}) cli.usage() will now print in the order added (x then a). Merlin Beedell From: Merlin Beedell <mbeed...@cryoserver.com> Sent: Tuesday, January 16, 2024 3:42 PM To: users@groovy.apache.org Subject: Displaying the entered command-line options as parsed by clibuilder I thought this might be useful... I wanted an easy way to print the parameters passed to groovy CliBuilder. Unlike the usage() method that prints the 'how to use' (header/parameter options/footer), I just wanted to print the final parsed value set. (Perhaps something like this could be incorporated into CliBuilder's OptionAccessor - a pretty print method?) It turns out to be a one liner [for basic single args] and 1 more for additional args. For example... def cli = new CliBuilder(usage:'''Cryoserver Export to PST''', footer:''' V1.0 MGB Jul 2020.''') cli.i(longOpt:'input', args:1, required: true, argName:'filepath', type:File, 'a directory containing Cryoserver Export zip files') cli.o(longOpt:'output', args:1, required: true, argName:'filepath', type:File, 'output into this directory') cli.d(longOpt:'depth',args:1, required: false, argName:'number', type:int, defaultValue: '1', 'levels of subdirectories to traverse. Default 1.') cli.m(longOpt:'max',args:1, required: false, argName:'number', type:int, defaultValue: '50000', 'Max num mails per pst. Default 50000.') cli.t(longOpt:'threads',args:1, required: false, argName:'number', type:int, defaultValue: '4', 'number of threads. Default 4.') cli.w(longOpt:'wrapped', args:0, required: false, defaultValue:false, 'Include Wrapper? Default = false (strip any wrapper)') cli.x(longOpt:'filefilter', args:1, required: false, argName:'regex', defaultValue: fileMatch, "a regex to select required export files. default = $fileMatch") cli.'?'(longOpt:'help', 'help') def opts = cli.parse(['-i','b','-o','c', 'plus', 'more']) if (!opts) { //if invalid opts then it prints usage by default return } cli.options.options.each {println "-$it.option(${it.longOpt}) = ${opts[(it.option)]}"} if (opts.arguments()) {println opts.arguments()} prints (note - args are in the same order as defined): -i(input) = b -o(output) = c -d(depth) = 1 -m(max) = 50000 -t(threads) = 4 -w(wrapped) = false -x(filefilter) = .* -?(help) = false [Plus, more] Merlin Beedell