首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自不同包的GroovyScriptEngine和groovy类

来自不同包的GroovyScriptEngine和groovy类
EN

Stack Overflow用户
提问于 2013-11-05 17:09:43
回答 1查看 1.8K关注 0票数 2

计划在OSGi中使用Groovy,从不同的包中加载脚本,但我认为从一些Groovy文件和一个简单的jUnit测试开始很容易。原来那是个好主意。我在不同的包中立即遇到Groovy类的问题。

我已经创建了一个带有自定义GroovyScriptEngine的ResourceConnector,它所做的就是打印请求的文件,然后尝试从类路径(资源dir)加载它。删除错误处理:

代码语言:javascript
复制
public URLConnection getResourceConnection(String arg0) throws ResourceException {
    System.err.println("Wanted: " + arg0);
    return getClass().getResource("/" + arg0).openConnection();
}

因此,在我的资源(资源,因为我稍后将从OSGi包或文件系统加载它们) dir中,我有以下目录结构:

代码语言:javascript
复制
com\test\groovy\SubPackageWithNoImport.groovy
com\test\groovy\SubPackageWithImport.groovy
com\test\groovy\SubPackageWithStaticImport.groovy
com\test\groovy\sub\IsolatedSub.groovy

SubPackageWith*文件试图调用"IsolatedSub“类上的方法。

IsolatedSub.groovy:

代码语言:javascript
复制
package com.test.groovy.sub;

public class IsolatedSub
{
    public int dummy() {
        return 1337;
    }
    public static int dummy2() {
        return 1338;
    }
}

SubPackageWithNoImport.groovy:

代码语言:javascript
复制
package com.test.groovy;

public class SubPackageNoImport {
    public int dummy() {
        IsolatedSub s = new IsolatedSub();
        return s.dummy();
    }
}

SubPackageWithImport.groovy:

代码语言:javascript
复制
package com.test.groovy;

import com.test.groovy.sub.IsolatedSub;
public class SubPackageWithImport {
    public int dummy() {
        IsolatedSub s = new IsolatedSub();
        return s.dummy();
    }
}

SubPackageWithStaticImport.groovy:

代码语言:javascript
复制
package com.test.groovy;

import static com.test.groovy.sub.IsolatedSub.dummy2;
public class SubPackageWithImportStatic {
    public int dummy() {
        return dummy2();
    }
}

我用来执行的代码如下(在jUnit测试中):

代码语言:javascript
复制
// "this" implements ResourceConnector as shown above
GroovyScriptEngine engine = new GroovyScriptEngine(this, getClass().getClassLoader());

Class<?> cl = engine.loadScriptByName("com/test/groovy/SubPackageNoImport.groovy");
GroovyObject o = (GroovyObject)cl.newInstance();
Object rv = o.invokeMethod("dummy", null);

我可以加载没有依赖关系的单个类,也可以在同一个目录中有依赖关系,但是一旦我进入子包或超级包,事情就会中断。

对于SubPackageWithNoImport (尝试使用IsolatedSub而不导入它),它尝试从ResourceConnector加载以下内容:

代码语言:javascript
复制
Wanted: com/test/groovy/SubPackageNoImport.groovy
Wanted: com/test/groovy/IsolatedSub.groovy

是啊,说得通。我没有指定包,所以应该是相同的

现在它开始变得奇怪了,SubPackageWithImport:

代码语言:javascript
复制
Wanted: com/test/groovy/SubPackageWithImport.groovy
Wanted: java/lang/com$test$groovy$sub$IsolatedSub.groovy

这看起来..。对我来说,java.lang?中的"com“的内部类?

对于SubPackageWithStaticImport:

代码语言:javascript
复制
Wanted: com/test/groovy/SubPackageWithImportStatic.groovy
Wanted: com/test/groovy/com/test/groovy/sub/IsolatedSub.groovy

更近了,但还是错了。

这就是背景..。我的问题是:我做错了什么?GroovyScriptEngine应该如何处理具有不同包名的groovy类?

额外的问题:我尝试添加一个自定义协议,即"test://filegoeshere",它被发送到资源连接器的第一个类,而不是它的依赖项--这是应该的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-05 22:20:42

哼..。如果要加载的类不是"my code“的一部分,那么在修改资源连接器并使它抛出异常之后,这些文件是它所要求的:

代码语言:javascript
复制
Wanted: com/test/groovy/SubPackageWithImport.groovy
Wanted: java/lang/com$test$groovy$sub$IsolatedSub.groovy
Wanted: java/io/com$test$groovy$sub$IsolatedSub.groovy
Wanted: java/net/com$test$groovy$sub$IsolatedSub.groovy
Wanted: java/util/com$test$groovy$sub$IsolatedSub.groovy
Wanted: groovy/lang/com$test$groovy$sub$IsolatedSub.groovy
Wanted: groovy/util/com$test$groovy$sub$IsolatedSub.groovy
Wanted: com/test$groovy$sub$IsolatedSub.groovy
Wanted: com/test/groovy$sub$IsolatedSub.groovy
Wanted: com/test/groovy/sub$IsolatedSub.groovy
Wanted: com/test/groovy/sub/IsolatedSub.groovy
Wanted: com\test\groovy\SubPackageWithImportBeanInfo.groovy
Wanted: com\test\groovy\SubPackageWithImportCustomizer.groovy
Wanted: com\test\groovy\sub\IsolatedSubBeanInfo.groovy
Wanted: com\test\groovy\sub\IsolatedSubCustomizer.groovy

代码现在运行良好,但我不确定这是正确的方法。检查“被通缉的文件”是否以某种版本的"com.test.groovy“开头有点混乱.欣然接受替代解决方案:)

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

https://stackoverflow.com/questions/19794728

复制
相关文章

相似问题

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