首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么同一个包中的类不能自动地看到对方呢?

为什么同一个包中的类不能自动地看到对方呢?
EN

Stack Overflow用户
提问于 2011-06-17 04:13:48
回答 1查看 2.4K关注 0票数 0

为什么当我运行一个Eclipse项目时,脚本在同一个包中是不可见的?为什么我必须明确地定义脚本引擎的目录。为什么新GroovyScriptEngine(“C:/GroovyScriptEngine/GroovyScriptEngine/Stack/src”)不能工作?

代码语言:javascript
复制
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 )

另一种工作方式是:

代码语言:javascript
复制
GroovyScriptEngine gse = new GroovyScriptEngine( [ './com/test' ] as String[] )
gse.run( "Hello.groovy", binding )

当我试图在src dir中使用脚本引擎运行时遇到的错误是:

代码语言:javascript
复制
// 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类似的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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“中(我想),

代码语言:javascript
复制
GroovyScriptEngine gse = new GroovyScriptEngine( "C:/Eclipse/work/S/src" )
gse.run( "Hello.groovy", binding )

只是不够。您缺少了"com/test",所以您可以指定

代码语言:javascript
复制
GroovyScriptEngine gse = new GroovyScriptEngine( "C:/Eclipse/work/S/src/com/test" )
gse.run( "Hello.groovy", binding )

代码语言:javascript
复制
GroovyScriptEngine gse = new GroovyScriptEngine( "C:/Eclipse/work/S/src" )
gse.run( "com/test/Hello.groovy", binding )

我认为后一种情况“更正确”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6381252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档