首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在孤立的类加载器中执行groovy脚本?

如何在孤立的类加载器中执行groovy脚本?
EN

Stack Overflow用户
提问于 2017-05-30 17:35:34
回答 1查看 821关注 0票数 5

我试图在一个独立的类加载器中运行groovy脚本,这样它们就不会在调用类的依赖关系上下文中执行。

代码语言:javascript
复制
    Path log4j = Paths.get("..../lib/log4j-1.2.17.jar");
    Path groovy = Paths.get("..../lib/groovy-all-2.1.3.jar");
    RootLoader rootLoader = new RootLoader(new URL[] { log4j.toUri().toURL(), groovy.toUri().toURL() }, null);
    GroovyScriptEngine engine = new GroovyScriptEngine(".../src/main/resources", rootLoader);
    engine.run("Standalone.groovy", "");

Standalone.groovy

代码语言:javascript
复制
import org.apache.log4j.BasicConfigurator
import org.apache.log4j.Logger

Logger logger = Logger.getLogger(getClass())
BasicConfigurator.configure()
logger.info("hello world")

pom.xml 节选

代码语言:javascript
复制
    <dependency>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-all</artifactId>
        <version>2.1.3</version>
    </dependency>

我尝试过的任何关于上面的变化都会导致

代码语言:javascript
复制
Exception in thread "main" groovy.lang.GroovyRuntimeException: Failed to create Script instance for class: class Standalone. Reason: java.lang.ClassCastException: Standalone cannot be cast to groovy.lang.GroovyObject
    at org.codehaus.groovy.runtime.InvokerHelper.createScript(InvokerHelper.java:443)
    at groovy.util.GroovyScriptEngine.createScript(GroovyScriptEngine.java:564)
    at groovy.util.GroovyScriptEngine.run(GroovyScriptEngine.java:551)
    at groovy.util.GroovyScriptEngine.run(GroovyScriptEngine.java:537)

我将其追溯到groovy.util.GroovyScriptEngine#loadScriptByName,在那里脚本被解析为一个Class<T>,其中T是脚本本身的名称。

我的理论是,这是由运行在调用类中的groovy运行库与在独立类加载器中运行的groovy运行时之间的二进制不兼容造成的,原因是groovy通过反射从脚本中创建合成类的方式。

对如何完成这件事有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-30 21:14:40

不要直接创建GroovyScriptEngine,而是通过rootLoader.loadClass()创建engine.run,并通过反射调用engine.run

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

https://stackoverflow.com/questions/44268526

复制
相关文章

相似问题

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