java - WildFly 中未找到 Nashorn 类

标签 java wildfly nashorn wildfly-8

我需要从 WildFly 中运行的 Web 应用程序内的 nashorn 访问内部类。

以下代码在我的机器上运行良好:

public class NashornTest {
    public static void main(String[] args) throws ClassNotFoundException {
        Class<?> cls = Class.forName("jdk.nashorn.internal.objects.ScriptFunctionImpl");
        System.out.println(cls);
    }
}

但是当我在 WildFly 中运行时,以下 servlet 抛出 ClassNotFoundException:

@WebServlet("/nashorn")
public class NashornServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Class<?> cls = null;
        try {
            cls = Class.forName("jdk.nashorn.internal.objects.ScriptFunctionImpl");
        } catch (ClassNotFoundException e) {
            throw new ServletException(e);
        }
    }
}

这是服务器日志:https://gist.github.com/csokol/b81633bdbfa09bb55e2b

最佳答案

看起来 nashorn 使用的所有包/类都存在疏忽。

您需要打开 WILDFLY_HOME/modules/system/layers/base/sun/jdk/main/module.xml 文件并添加

<path name="jdk/nashorn/api/scripting"/>
<path name="jdk/nashorn/api/scripting/resources"/>
<path name="jdk/nashorn/internal/codegen"/>
<path name="jdk/nashorn/internal/codegen/types"/>
<path name="jdk/nashorn/internal/ir"/>
<path name="jdk/nashorn/internal/ir/annotations"/>
<path name="jdk/nashorn/internal/ir/debug"/>
<path name="jdk/nashorn/internal/ir/visitor"/>
<path name="jdk/nashorn/internal/lookup"/>
<path name="jdk/nashorn/internal/objects"/>
<path name="jdk/nashorn/internal/objects/annotations"/>
<path name="jdk/nashorn/internal/parser"/>
<path name="jdk/nashorn/internal/runtime"/>
<path name="jdk/nashorn/internal/runtime/arrays"/>
<path name="jdk/nashorn/internal/runtime/linker"/>
<path name="jdk/nashorn/internal/runtime/options"/>
<path name="jdk/nashorn/internal/runtime/regexp"/>
<path name="jdk/nashorn/internal/runtime/regexp/joni"/>
<path name="jdk/nashorn/internal/runtime/resources"/>
<path name="jdk/nashorn/internal/runtime/resources/fx"/>
<path name="jdk/nashorn/internal/runtime/scripts"/>
<path name="jdk/nashorn/internal/tools"/>
<path name="jdk/nashorn/internal/tools/resources"/>
<path name="jdk/internal/dynalink"/>
<path name="jdk/internal/dynalink/beans"/>
<path name="jdk/internal/dynalink/linker"/>
<path name="jdk/internal/dynalink/support"/>

以及任何其他可能丢失的路径/包。

仅供引用,这是此文件在 8.x 中的外观 branch

我还在 WildFly master 中创建了 Pull 请求来修复此问题和 8.x branch

关于java - WildFly 中未找到 Nashorn 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24478436/

相关文章:

server - 如何在 Wildfly 配置文件中使用变量?

java - WildFly - 创建具有长时间运行的应用程序的应用程序

java - 使用 JVM Nashorn (Play Framework) 呈现 React.js 时出错。我得到 "null is not a function"

javascript - 如何使用 Nashorn 将 Javascript 对象从 Java 传递到 Javascript

java - 用JCodeModel生成抽象类

mysql - Wildfly 10 持久化 MySQL 表未找到

java - RXTX Java librairie错误

javascript - 无法从 nashorn java 调用 javascript 的异步函数

java - 如何在同一个 Android 应用程序中使用抽屉式导航和底部导航

java - CardLayout 约束适用于 Windows,但不适用于 OS X