You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Dirk Heinrichs (Jira)" <ji...@apache.org> on 2020/04/27 13:57:00 UTC

[jira] [Comment Edited] (GROOVY-9528) CLIBuilder: "error: Missing required options" when unknown options are provided

    [ https://issues.apache.org/jira/browse/GROOVY-9528?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17093535#comment-17093535 ] 

Dirk Heinrichs edited comment on GROOVY-9528 at 4/27/20, 1:56 PM:
------------------------------------------------------------------

Indeed. Wouldn't this be worth mentioning in the documentation? Even the API documentation only mentions one contructor: CliBuilder().


was (Author: dheinric):
Indeed. Wouldn't this be worth mentioning in the documentation?

> CLIBuilder: "error: Missing required options" when unknown options are provided
> -------------------------------------------------------------------------------
>
>                 Key: GROOVY-9528
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9528
>             Project: Groovy
>          Issue Type: Bug
>          Components: command line processing
>    Affects Versions: 3.0.2
>         Environment: Linux/Windows
>            Reporter: Dirk Heinrichs
>            Priority: Major
>
> When passing an additional option to a script that doesn't know about this option, I get an error message about "missing required options", listing all required options that follow the unkown option.
> The following example code reproduces the issue:
> {code:java}
> @Grab('info.picocli:picocli-groovy:4.2.0')
> @GrabConfig(systemClassLoader=true)
> import groovy.cli.picocli.CliBuilder
> def cli = new CliBuilder(name: 'cliTest.groovy')
> cli.h(type: Boolean, longOpt: 'help', usageHelp: true, required: false, 'Show usage information')
> cli.a(type: String, longOpt: 'optA', required: true, args: 1, 'Option a (required)')
> cli.b(type: String, longOpt: 'optB', required: true, args: 1, 'Option b (required)')
> // NOTE: No "-c|--optC" here
> cli.d(type: String, longOpt: 'optD', required: true, args: 1, 'Option d (required)')
> cli.e(type: String, longOpt: 'optE', required: true, args: 1, 'Option e (required)')
> cli.f(type: String, longOpt: 'optF', required: false, args: 1, 'Option f (optional)')
> def opts = cli.parse(args)
> opts || System.exit(1)
> if(opts.h) {
>   cli.usage()
>   System.exit(0)
> }{code}
> When invoked with an additional option, '-c C' for example, it produces the following, misleading output:
> {code:java}
> % ~/tmp/groovy-3.0.2/bin/groovy ./cliTest.groovy -a A -b B -c C -d D -e E
> error: Missing required options [--optD=PARAM, --optE=PARAM]
> Usage: cliTest.groovy [-h] -a=PARAM -b=PARAM -d=PARAM -e=PARAM [-f=PARAM]
>   -a, --optA=PARAM   Option a (required)
>   -b, --optB=PARAM   Option b (required)
>   -d, --optD=PARAM   Option d (required)
>   -e, --optE=PARAM   Option e (required)
>   -f, --optF=PARAM   Option f (optional)
>   -h, --help         Show usage information{code}
> The list of missing options varies depending on where "-c C" is inserted. There's no error when it's the last one.
> I would expect it to either ignore the addtional option in all cases or emit an error message about an unknown option. But in no case should it error out because of missing required options when there are none missing.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)