簡體   English   中英

為什么同一包中的類無法自動相互看見?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM