[
https://issues.apache.org/jira/browse/GROOVY-10105?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Daniel Sun reassigned GROOVY-10105:
-----------------------------------
Assignee: Eric Milles
> Groovy Shell having trouble evaluating script
> ---------------------------------------------
>
> Key: GROOVY-10105
> URL: https://issues.apache.org/jira/browse/GROOVY-10105
> Project: Groovy
> Issue Type: Bug
> Components: Groovysh
> Affects Versions: 2.5.19, 3.0.13, 4.0.6
> Reporter: Eric Milles
> Assignee: Eric Milles
> Priority: Major
> Fix For: 3.0.14, 2.5.20, 4.0.7
>
> Attachments: image-2022-11-07-09-36-08-504.png, screenshot-1.png
>
>
> Groovy Shell is giving the following exception when evaluating a simple
> script like "print 'hello'":
> {code:java}
> ERROR java.lang.ClassCastException:
> groovysh_evaluate cannot be cast to groovy.lang.GroovyObject
> at org.apache.groovy.groovysh.Interpreter.evaluate
> (Interpreter.groovy:72)
> at org.apache.groovy.groovysh.Evaluator$evaluate.call (Unknown Source)
> at org.apache.groovy.groovysh.Groovysh.execute (Groovysh.groovy:203)
> at org.apache.groovy.groovysh.Shell.leftShift (Shell.groovy:121)
> at org.apache.groovy.groovysh.Shell$leftShift$0.call (Unknown Source)
> at org.apache.groovy.groovysh.ShellRunner.work (ShellRunner.groovy:93)
> at org.apache.groovy.groovysh.InteractiveShellRunner.super$2$work
> (InteractiveShellRunner.groovy)
> at org.apache.groovy.groovysh.InteractiveShellRunner.work
> (InteractiveShellRunner.groovy:136)
> at org.apache.groovy.groovysh.ShellRunner.run (ShellRunner.groovy:57)
> at org.apache.groovy.groovysh.InteractiveShellRunner.super$2$run
> (InteractiveShellRunner.groovy)
> at org.apache.groovy.groovysh.InteractiveShellRunner.run
> (InteractiveShellRunner.groovy:95)
> at java_lang_Runnable$run.call (Unknown Source)
> at org.apache.groovy.groovysh.Groovysh.run (Groovysh.groovy:635)
> at org.apache.groovy.groovysh.Groovysh$run$0.callCurrent (Unknown
> Source)
> at org.apache.groovy.groovysh.Groovysh.run (Groovysh.groovy:600)
> at org.apache.groovy.groovysh.Groovysh$run.call (Unknown Source)
> at org.apache.groovy.groovysh.Main.startGroovysh (Main.groovy:190)
> at org.apache.groovy.groovysh.Main.main (Main.groovy:156)
> {code}
> I am starting Groovy Shell from within the {{GroovyStarter}} like this:
> {code:java}
> java -cp
> xxx/lib/groovy-4.0.0.jar;xxx/lib/groovy-groovysh-4.0.0.jar;xxx/lib/jline-2.14.6.jar
> -Dgroovy.home="${groovy_home}"
> -Djava.system.class.loader=groovy.lang.GroovyClassLoader
> org.codehaus.groovy.tools.GroovyStarter --classpath
> xxx/lib/guava-30.1.1.jar;xxx/lib/org.eclipse.jdt.annotation_2.2.400.v20191120-1313.jar;xxx/lib/groovy-4.0.0.jar;xxx/lib/groovy-test-4.0.0.jar;xxx/lib/ivy-2.5.0.jar;yyy/bin;yyy/src
> --main org.apache.groovy.groovysh.Main --define
> jline.terminal=jline.UnsupportedTerminal --parameters
> {code}
> I use {{GroovyStarter}} so that I can supply separate classpaths, one for the
> tool itself (groovysh, jline, etc.) and one for the scripts that are
> evaluated (groovy, etc.). And the groovy jar may be different if the project
> sources it through gradle or maven or whatever.
> I think the problem I am encountering is that when the script is to be
> evaluated, it is not assignable to the {{groovy.lang.Script}} class in the
> {{ClassLoader}} of the tool and so it goes the fallback route in
> [{{InvokerHelper#createScript}}|https://github.com/apache/groovy/blob/7a56d7130aaf7b5244fa5a82fa0505fb7509f51f/src/main/java/org/codehaus/groovy/runtime/InvokerHelper.java#L460].
> I made a change there to [stop casting to
> {{GroovyObject}}|https://github.com/apache/groovy/commit/7a56d7130aaf7b5244fa5a82fa0505fb7509f51f],
> which probably fails for the same reason. However, the main method is void
> and so null is displayed for any evaluation.
> Is there a way for {{InvokerHelper}} to run the generated script without
> using {{Script}} and {{Binding}} from its classpath? Or to detect that the
> script implements {{groovy.lang.Script}} and safely create it and execute
> {{run()}}?
--
This message was sent by Atlassian Jira
(v8.20.10#820010)