Почему классы в одном пакете не могут видеть друг друга автоматически? - PullRequest
0 голосов
/ 17 июня 2011

Почему при запуске проекта 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 .

1 Ответ

0 голосов
/ 17 июня 2011

В groovy, как и в java, вы должны разделить понятия source-folder и package.Исходная папка в вашем случае - «C: / Eclipse / work / S / src», пакет - «com.test».

Если вы указываете «C: / Eclipse / work / S / src» в GroovyScriptEngine, вам необходимо полностью указать класс (то есть «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 )

, где я считаю последний случай «более правильным».

...