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/02/17 07:34:00 UTC

[jira] [Updated] (GROOVY-9404) NoClassDefFoundError: picocli/CommandLine$ParameterException in scripts after update to Groovy 3.0.0

     [ https://issues.apache.org/jira/browse/GROOVY-9404?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Dirk Heinrichs updated GROOVY-9404:
-----------------------------------
    Description: 
After update from Groovy 2.5.x to 3.0.0, scripts using picocli are failing with the following error:
{code:java}
 NoClassDefFoundError: picocli/CommandLine$ParameterException{code}
Here's a small example showing the problem:
{code:java}
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.c(type: String, longOpt: 'config', required: true, args: 1, 'Path to config file (required)')
def opts = cli.parse(args)
opts || System.exit(1)
if(opts.h) {
  cli.usage()
  System.exit(0)
}

println(opts.c)
{code}
Running this with Groovy 2.5.7 works:
{code:java}
% ~/tmp/groovy-2.5.7/bin/groovy ./cliTest.groovy -c data/config_prod.yaml 
data/config_prod.yaml{code}
But with 3.0.0, it does not:
{code:java}
% ~/tmp/groovy-3.0.0/bin/groovy ./cliTest.groovy -c data/config_prod.yaml
Caught: java.lang.NoClassDefFoundError: picocli/CommandLine$ParameterException
java.lang.NoClassDefFoundError: picocli/CommandLine$ParameterException
        at cliTest.run(cliTest.groovy:4)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Caused by: java.lang.ClassNotFoundException: picocli.CommandLine$ParameterException
        ... 4 more{code}

  was:
After update from Groovy 2.5.x to 3.0.0, scripts using picocli are failing with the following error:
{code:java}
 NoClassDefFoundError: picocli/CommandLine$ParameterException{code}
Here's a small example showing the problem:
{code:java}
 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.c(type: String, longOpt: 'config', required: true, args: 1, 'Path to config file (required)')
def opts = cli.parse(args)
opts || System.exit(1)
if(opts.h) {
  cli.usage()
  System.exit(0)
}

println(opts.c)
{code}
Running this with Groovy 2.5.7 works:
{code:java}
% ~/tmp/groovy-2.5.7/bin/groovy ./cliTest.groovy -c data/config_prod.yaml 
data/config_prod.yaml{code}
But with 3.0.0, it does not:
{code:java}
% ~/tmp/groovy-3.0.0/bin/groovy ./cliTest.groovy -c data/config_prod.yaml
Caught: java.lang.NoClassDefFoundError: picocli/CommandLine$ParameterException
java.lang.NoClassDefFoundError: picocli/CommandLine$ParameterException
        at cliTest.run(cliTest.groovy:4)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Caused by: java.lang.ClassNotFoundException: picocli.CommandLine$ParameterException
        ... 4 more{code}


> NoClassDefFoundError: picocli/CommandLine$ParameterException in scripts after update to Groovy 3.0.0
> ----------------------------------------------------------------------------------------------------
>
>                 Key: GROOVY-9404
>                 URL: https://issues.apache.org/jira/browse/GROOVY-9404
>             Project: Groovy
>          Issue Type: Bug
>          Components: command line processing
>    Affects Versions: 3.0.0
>         Environment: Linux
>            Reporter: Dirk Heinrichs
>            Priority: Major
>
> After update from Groovy 2.5.x to 3.0.0, scripts using picocli are failing with the following error:
> {code:java}
>  NoClassDefFoundError: picocli/CommandLine$ParameterException{code}
> Here's a small example showing the problem:
> {code:java}
> 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.c(type: String, longOpt: 'config', required: true, args: 1, 'Path to config file (required)')
> def opts = cli.parse(args)
> opts || System.exit(1)
> if(opts.h) {
>   cli.usage()
>   System.exit(0)
> }
> println(opts.c)
> {code}
> Running this with Groovy 2.5.7 works:
> {code:java}
> % ~/tmp/groovy-2.5.7/bin/groovy ./cliTest.groovy -c data/config_prod.yaml 
> data/config_prod.yaml{code}
> But with 3.0.0, it does not:
> {code:java}
> % ~/tmp/groovy-3.0.0/bin/groovy ./cliTest.groovy -c data/config_prod.yaml
> Caught: java.lang.NoClassDefFoundError: picocli/CommandLine$ParameterException
> java.lang.NoClassDefFoundError: picocli/CommandLine$ParameterException
>         at cliTest.run(cliTest.groovy:4)
>         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>         at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> Caused by: java.lang.ClassNotFoundException: picocli.CommandLine$ParameterException
>         ... 4 more{code}



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