Repository navigation
Example GroovyScript throws IllegalStateException registering runner class TestNgRunner #1885
Copy link
Copy link
Closed
Labels
Milestone
Description
Running the example code at https://picocli.info/#_groovy_scripts results in the following exception:
java.lang.IllegalStateException: Error registering runner class 'org.codehaus.groovy.testng.TestNgRunner'
at groovy.grape.GrapeIvy$_processRunners_closure6.doCall(GrapeIvy.groovy:414)
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)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:343)
at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:328)
at org.codehaus.groovy.runtime.metaclass.ClosureMetaClass.invokeMethod(ClosureMetaClass.java:279)
at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1009)
at groovy.lang.Closure.call(Closure.java:418)
at groovy.lang.Closure.call(Closure.java:434)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2386)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2371)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.each(DefaultGroovyMethods.java:2412)
at groovy.grape.GrapeIvy.processRunners(GrapeIvy.groovy:409)
at groovy.grape.GrapeIvy.processMetaInfServices(GrapeIvy.groovy:386)
at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:289)
at groovy.grape.Grape$1.run(Grape.java:172)
at groovy.grape.Grape$1.run(Grape.java:158)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at groovy.grape.Grape.grab(Grape.java:158)
at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:380)
at org.codehaus.groovy.transform.ASTTransformationVisitor.lambda$addPhaseOperationsForGlobalTransforms$5(ASTTransformationVisitor.java:377)
at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:896)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:692)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:666)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:373)
at groovy.lang.GroovyClassLoader.lambda$parseClass$2(GroovyClassLoader.java:316)
at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163)
at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:572)
at groovy.lang.GroovyShell.run(GroovyShell.java:392)
at groovy.lang.GroovyShell.run(GroovyShell.java:382)
at groovy.ui.GroovyMain.processOnce(GroovyMain.java:649)
at groovy.ui.GroovyMain.run(GroovyMain.java:389)
at groovy.ui.GroovyMain.access$1400(GroovyMain.java:67)
at groovy.ui.GroovyMain$GroovyCommand.process(GroovyMain.java:313)
at groovy.ui.GroovyMain.processArgs(GroovyMain.java:141)
at groovy.ui.GroovyMain.main(GroovyMain.java:114)
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)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109)
at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:132)
Caused by: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Cannot cast object 'org.codehaus.groovy.testng.TestNgRunner@7afbf561' with class 'org.codehaus.groovy.testng.TestNgRunner' to class 'org.apache.groovy.plugin.GroovyRunner'
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnSAM(DefaultTypeTransformation.java:424)
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.continueCastOnNumber(DefaultTypeTransformation.java:335)
at org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation.castToType(DefaultTypeTransformation.java:255)
at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.castToType(ScriptBytecodeAdapter.java:621)
at groovy.grape.GrapeIvy$_processRunners_closure6.doCall(GrapeIvy.groovy:412)
... 45 more
Running groovy -v returns
Groovy Version: 4.0.6 JVM: 11.0.17 Vendor: Eclipse Adoptium OS: Linux
Reactions are currently unavailable
Activity
remkop commentedon Nov 29, 2022
Thank you for raising this! Looks similar to #1874.
I hope I will have time to look at this the coming weekend.
Note to self: potential causes:
picocli-groovymodule should declaregroovy-allas dependency #1613 DEP: The picocli-groovy module now declares groovy-all as dependency.paulk-asert commentedon Jan 24, 2023
I am not sure how you are setting the classpath for your script. Since the maven coordinates changed from
org.codehaus.groovytoorg.apache.groovywith Groovy 4, you are possibly getting both Groovy 2.4.x (from picocli dependencies) along with Groovy 4 runners. The Groovy 4 testng runner has full package oforg.apache.groovy.plugin.testng.TestNgRunner. Your stacktrace is showing the old 2.4.x runnerorg.codehaus.groovy.testng.TestNgRunner. You will want to exclude that from your classpath.remkop commentedon Jan 25, 2023
Thank you @paulk-asert for pointing that out, and for providing the workaround (in #1874)!
This issue was caused by #1613, which made
picocli-groovybring in the (old)org.codehaus.groovy:groovy-alldependency. Since any Groovy script will already need to have a Groovy environment in which it is run, picocli-groovy should not try to bring in Groovy op top of that.This is fixed in the main branch now and the fix will be part of the picocli 4.7.1 release. Until then, please use the above workaround.
[remkop#1874][remkop#1885][remkop#1933] Bugfix: The `picocli-groovy` …