为什么在运行Eclipse Groovy项目时,脚本在同一个包中彼此不可见?为什么我必须明确定义脚本引擎的目录。为什么不 新的GroovyScriptEngine(“C:/ Eclipse / workspace / Stack / src”) 工作?
package com.test
import groovy.lang.Binding
import groovy.util.GroovyScriptEngine
Binding binding = new Binding()
// explicitly defined path to where Hello.groovy script is located
GroovyScriptEngine gse = new GroovyScriptEngine( "C:/Eclipse/work/S/src/com/test" )
gse.run( "Hello.groovy", binding )
另一种有效的方法是:
GroovyScriptEngine gse = new GroovyScriptEngine( [ './com/test' ] as String[] )
gse.run( "Hello.groovy", binding )
当我尝试使用src目录中的脚本引擎运行时出现的错误是:
// project working directory is C:/Eclipse/work/S/src
GroovyScriptEngine gse = new GroovyScriptEngine( "C:/Eclipse/work/S/src" )
.....
Caught: groovy.util.ResourceException:
Cannot open URL: file:/C:/Eclipse/work/S/src/Hello.groovy
at com.test.TestExample.run(TestExample.groovy:9)
这是与this类似的问题。
答案 0 :(得分:0)
在java中像groovy一样,你必须分离源文件夹和包的概念。 您的案例中的源文件夹是“C:/ Eclipse / work / S / src”,包是“com.test”。
如果在GroovyScriptEngine中指定“C:/ Eclipse / work / S / src”,则需要完全指定类(即“com / test / Hello.groovy”),即使调用类是相同的包。
由于“Hello.groovy”在“C:/Eclipse/work/S/src/com/test/Hello.groovy”中(我猜),
GroovyScriptEngine gse = new GroovyScriptEngine( "C:/Eclipse/work/S/src" )
gse.run( "Hello.groovy", binding )
还不够。您缺少“com / test”,因此您要么指定
GroovyScriptEngine gse = new GroovyScriptEngine( "C:/Eclipse/work/S/src/com/test" )
gse.run( "Hello.groovy", binding )
或
GroovyScriptEngine gse = new GroovyScriptEngine( "C:/Eclipse/work/S/src" )
gse.run( "com/test/Hello.groovy", binding )
我认为后一种情况“更正确”。