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

Eric Milles commented on GROOVY-10105:
--------------------------------------

Still an issue

 !screenshot-1.png! 

> 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.14, 3.0.8, 4.0.0-beta-1
>            Reporter: Eric Milles
>            Priority: Major
>         Attachments: 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)

Reply via email to