为什么当我运行一个Eclipse项目时,脚本在同一个包中是不可见的?为什么我必须明确地定义脚本引擎的目录。为什么新GroovyScriptEngine(“C:/GroovyScriptEngine/GroovyScriptEngine/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 dir中使用脚本引擎运行时遇到的错误是:
// 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类似的问题。
发布于 2011-06-17 08:37:31
在groovy中,就像在java中一样,您必须分离源文件夹和包的概念。在您的例子中,源文件夹是“C:/Eclipse/S/src”,包是"com.test“。
如果在GroovyScriptEngine中指定“C:/Eclipse/S/src”,则需要完全指定类(即"com/test/Hello.groovy"),即使调用类位于同一个包中。
因为"Hello.groovy“是在”C:/Eclipse/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 )我认为后一种情况“更正确”。
https://stackoverflow.com/questions/6381252
复制相似问题