java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/ScriptUtils in osgi bundle

java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/ScriptUtils in osgi bundle

ScriptEngineManager manager = new ScriptEngineManager(null);
ScriptEngine engine = manager.getEngineByName("nashorn");
BundleContext context = FrameworkUtil.getBundle(FormulaImpl.class).getBundleContext();
URL configURL = context.getBundle().getEntry("eval.txt");
if (configURL != null) {
    InputStream input = null;
    try {
        input = configURL.openStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(input));
        StringBuilder out = new StringBuilder();
        String line;
        while ((line = reader.readLine()) != null) {
            out.append(line);
        }
        engine.eval(out.toString());
    } catch (Exception e) {
        throw new RuntimeException(e.getMessage());
    } finally {
        try {
            input.close();
        } catch (Exception e) {
            throw new RuntimeException(e.getMessage());
        }
    }
}

Object obj = engine.get("formulaColumn");

在此代码中,obj 获取为对象数组。 我不能转换成对象。 在 java 1.7 中使用 Rhino 对象正在获取。 我试过

Object obj = (Object)ScriptUtils.convert(engine.get("formulaColumn"), Object.class);

但是 java 1.8

中没有显示 calssDef 错误

我正在使用 osgi。我导出了 jdk.nashorn.api.scripting.ScriptUtils 。 从我的 jsfile 我返回一个数组。

我认为您不必在 java 代码中使用 ScriptUtils.convert() 方法,如果您 return 从 java 脚本中获取数据如下:

returnJava.to(数据,"java.lang.Object")

希望对您有所帮助。