[英]Why can't classes in the same package see each other automagically?
為什么當我運行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)
這是一個類似的問題本 。
在groovy中,就像在Java中一樣,您必須將source-folder和package的概念分開。 您的情況下的源文件夾是“ 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 )
我認為后一種情況“更正確”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.