需要帮助将Script Engine加载到Karaf

时间:2016-11-20 19:10:01

标签: java osgi karaf scriptengine renjin

有没有人有幸将脚本引擎加载到Karaf中。我已经看到了一些关于将脚本引擎加载到OSGi容器中的旧链接: - https://devnotesblog.wordpress.com/2011/09/07/scripting-using-jsr-223-in-an-osgi-environment/ - Is OSGi fundamentally incompatible with JSR-223 Scripting Language Discovery?

但到目前为止没有运气装入卡拉夫。我有一个简单的示例项目,我在这里尝试做什么:

https://gitlab.com/mkwyche/helpful-hints/tree/master/renjin-karaf

每次我尝试加载脚本。使用以下行:

        ScriptEngineManager manager = new ScriptEngineManager();

    // create a Renjin engine:
    engine = manager.getEngineByName("Renjin");
    // check if the engine has loaded correctly:
    if(engine == null) {
        throw new RuntimeException("Renjin Script Engine not found on the classpath.");
    }

我找到了一个未找到课程的例外:

    at java.lang.Thread.run(Thread.java:745)[:1.8.0_60]
     

引起:java.lang.RuntimeException:在类路径中找不到Renjin脚本引擎。           在datadidit.helpful.hints.renjin.karaf.RenjinKarafTest.testRuntime(RenjinKarafTest.java:24)           at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_60]           at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_60]           at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_60]           at java.lang.reflect.Method.invoke(Method.java:497)[:1.8.0_60]           在org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:299)[12:org.apache.aries.blueprint.core:1.6.2]           在org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:980)[12:org.apache.aries.blueprint.core:1.6.2]           在org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:736)[12:org.apache.aries.blueprint.core:1.6.2]           ......还有40多个

我尝试过嵌入捆绑包,动态导入等等......任何建议都会非常感激。

感谢。

1 个答案:

答案 0 :(得分:1)

通过ScriptEngineManager加载ScriptEngine可能很复杂,因为ScriptEngineManager使用的ClassLoader可能不是您想要的。

您可以尝试直接实例化Renjin:

RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
RenjinScriptEngine engine = factory.getScriptEngine();

如果在加载Renjin时遇到实际错误,这也可能会为您提供更多详细信息。