Wildfly 8.2 - ScriptEngineManager.getEngineFactories 在服务器启动时为空

Wildfly 8.2 - ScriptEngineManager.getEngineFactories is empty on server startup

我在 Java 8(打开 JDK)上遇到 Wildfly 8.2.1 运行 的奇怪行为。我特别提到 Java 8,因为我在 Java 7.

上没有看到这个问题

在启动我的 Wildfly 模块时,我有代码使用 Java RhinoScriptEngine 加载 Java 脚本。

    List<ScriptEngineFactory> engineFactories = engineManager.getEngineFactories();
    ScriptEngine scriptEngine = engineManager.getEngineByName("js");

由于 scriptEngine 被分配为 null,我添加了调试日志并注意到 engineFactories 只是一个空的 List(好吧,engineFactories 本身只是为了调试目的而被提取)。但是,在模块启动完成后,这段代码有效,并列出了 RhinoScriptEngineFactory.

Java8 中是否有 Wildfly 8.2 不知道的更改,或者我是否需要向我的模块添加显式依赖项?

脚本引擎管理器使用service provider机制枚举ScriptEngineFactory的所有实现。在可从

访问的资源中搜索 ScriptEngineFactory 服务描述
  1. Thread.currentThread().getContextClassLoader() - 构造不带参数的 ScriptEngineManage 时
  2. Bootrap class 加载程序 - 当使用 null 参数构造 ScriptEngineManager 时
  3. Class 加载程序 - 当使用特定的 class 加载程序
  4. 构造 sw 时

如何创建 ScriptEngineManager?

如果不带参数构造ScriptEngineManager:什么return Thread.currentThread().getContextClassLoader() 模块启动时和模块启动完成时?

你能为你的模块附加(上传到 pastebin 或其他地方)module.xml 吗?

在java 8 rhino 脚本引擎被nashorn 脚本引擎取代。你真的在加载模块后得到 RhinoScriptEngineFactory 吗?还是 NashornScriptEngine?