In 2.5.0-rc-2, groovy.util.CliBuilder delegates to
groovy.cli.picocli.CliBuilder. The error is that the `parser` property of
this class is no longer writable.

You can resolve this with 2.5.0-rc-2 by either not setting the `parser`
property in the CliBuilder constructor or using the
groovy.cli.commons.CliBuilder instead.

On the Groovy side I’m not sure what the best way is to make the transition
easier.  The picocli version of CliBuilder can not make use of the
Commons-CLI parser class.  We could modify CliBuilder to silently ignore
the specified parser.  (We’d have to rename the picocli ParserSpec `parser`
property in CliBuilder to something else.)

Thoughts?


On Sun, May 6, 2018 at 20:35 Keegan Witt <[email protected]> wrote:

> FYI 2.5.0-rc-2 breaks Gant.  Specifically, it's caused by changing
> groovy.util.CliBuilder to use Picocli
>
> java.lang.reflect.InvocationTargetException
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>         at java.lang.reflect.Method.invoke(Method.java:498)
>         at
> org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:114)
>         at
> org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:136)
> Caused by: groovy.lang.ReadOnlyPropertyException: Cannot set readonly
> property: parser for class: groovy.util.CliBuilder
>         at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:2746)
>         at groovy.lang.MetaClassImpl.setProperty(MetaClassImpl.java:3782)
>         at groovy.lang.MetaClassImpl.setProperties(MetaClassImpl.java:1759)
>         at
> org.codehaus.groovy.runtime.callsite.ConstructorSite$NoParamSite.callConstructor(ConstructorSite.java:125)
>         at
> org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:59)
>         at
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:238)
>         at
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:250)
>         at gant.Gant.processArgs(Gant.groovy:463)
>         at gant.Gant$processArgs.call(Unknown Source)
>         at
> org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
>         at
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
>         at
> org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:128)
>         at gant.Gant.main(Gant.groovy:668)
>         ... 6 more
>
> The line in Gant is
> def cli = new CliBuilder(usage: 'gant [option]* [target]*', parser: new
> GnuParser())
>
> Was this breakage intentional?  I think a lot of stuff will break with
> parser not being able to be set anymore.
>
> -Keegan
>

Reply via email to