【问题标题】:Need help loading Script Engine into Karaf需要帮助将脚本引擎加载到 Karaf
【发布时间】:2017-04-04 03:26:41
【问题描述】:

有没有人幸运地将脚本引擎加载到 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?

但是到目前为止加载到 karaf 中没有运气。我在这里尝试做的简单示例项目:

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 Script Engine。 在 datadidit.helpful.hints.renjin.karaf.RenjinKarafTest.testRuntime(RenjinKarafTest.java:24) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_60] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_60] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_60] 在 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 更多

我尝试过嵌入捆绑包、动态导入等...任何建议将不胜感激。

谢谢。

【问题讨论】:

  • 在 karaf 4.0.7 中运行并拥有 java 1.8

标签: java osgi karaf scriptengine renjin


【解决方案1】:

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

你可以尝试直接实例化仁进:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-01-23
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-25
相关资源
最近更新 更多