无法在 Karaf OSGi 中加载 ScriptEngineManager 和 ScriptEngine(找不到 Nashorn)

ScriptEngineManager and ScriptEngine can not be loaded in Karaf OSGi (Nashorn not found)

我正在尝试使用 ScriptEngineManagerScriptEngine 来使用 Java 执行一些 Java 脚本代码。我使用 Java 8 我在 Karaf OSGi 下执行此代码。

我使用的示例在示例 Java Class 中运行良好,但将其打包时出现此错误 ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider jdk.nashorn.api.scripting.NashornScriptEngineFactory not found

当我查看包的 headers 时,我看到包导入了 javax.script, 被调用 类 的包,但似乎 (nashorn) 提供者是没有找到。

谢谢

你需要确保你有一个包或系统来实际导出那些有问题的包:

因此要么安装相应的包,要么您需要调整系统包的导出,在这种情况下编辑 jre.properties 并确保相关包是从系统包中导出的。

转到文件 etc/config.properties(位于 Karaf 安装内部),找到配置 属性 org.osgi.framework.bootdelegation 并添加 jdk.nashorn.* 。完整配置如下:

org.osgi.framework.bootdelegation=org.apache.karaf.jaas.boot,org.apache.karaf.jaas.boot.principal,sun.*,com.sun.*,javax.transaction,javax.transaction.*,javax.xml.crypto,javax.xml.crypto.*,org.apache.xerces.jaxp.datatype,org.apache.xerces.stax,org.apache.xerces.parsers,org.apache.xerces.jaxp,org.apache.xerces.jaxp.validation,org.apache.xerces.dom,sun.*,jdk.nashorn.*

Bug 已报告给 Karaf 社区。

编辑:如果您在测试中使用 Pax Exam Container 4.x for Karaf 那么请不要忘记将 org.ops4j.pax.exam.CoreOptions.bootDelegationPackage("jdk.nashorn.*") 添加到您的配置中测试容器。