I am writing a simple groovy script for which I want a command line as simple as-
./someTask.groovy task-profile
Also, the script should have a --help
or -h
option which specifies all the different values task-profile
can take.
task-profile
can take the following values-
task-1
task-2
task-3
And the --help
option should tell the users about all available task-profile
values and also how to use them.
I searched a lot but only found examples that had options (eg -a
, -b
, -c
, etc.)
How to write a script that has no option, but only positional parameters, I can hardcode it using switch statements, but I want to learn to use CliBuilder
. Any help will be appreciated.
CliBuilder was updated in Groovy 2.5 by adding support for a picocli-backed implementation (groovy.cli.picocli.CliBuilder
). This article shows many details of the new features that are now available in CliBuilder.
However, even in this version of CliBuilder, the public API only supports a list of positional parameters, with a single description for that list.
@Unparsed(description = 'positional parameters')
List positionals
Unfortunately, the CliBuilder API currently does not provide a way to show separate positional parameters, with individual descriptions, in the usage help message of your application.
If your goal is to have separate positional parameters, perhaps with separate types, separate default values, etc., and let the usage help message show separate descriptions for each positional parameter, then you may want to consider using picocli directly (without CliBuilder) in your Groovy script or in your Groovy application.
The picocli user manual has many Groovy examples and has a dedicated section on using picocli in Groovy applications and Groovy scripts. This article (Groovy Scripts on Steroids) may also be useful.
Here is an example task-profile
Groovy script with three positional parameters:
// task-profile.groovy
@Grab('info.picocli:picocli-groovy:4.6.3')
@GrabConfig(systemClassLoader=true)
@Command(name = "task-profile", version = "task-profile 1.0",
mixinStandardHelpOptions = true, // add --help and --version options
description = "Task Profile")
@picocli.groovy.PicocliScript2
import groovy.transform.Field
import static picocli.CommandLine.*
@Parameters(index = "0", description = "The first task")
@Field String task1;
@Parameters(index = "1", description = "The second task")
@Field String task2;
@Parameters(index = "2", description = "The third task")
@Field String task3;
// PicocliBaseScript2 prints usage help or version if requested by the user
println "hi, the selected tasks are $task1, $task2 and $task3"