java - Java < 15 和 >= 15 的不同 Nashorn 引擎?

标签 java kotlin nashorn java-15

我正在尝试为 Nashorn 找到一种解决方法,使其与 Java 1.8 以上的每个版本兼容,如另一个 question 中所述我之前问过。
我目前正在 try catch UnsupportedClassVersionError 以查明系统是否能够运行 standalone Nashorn对于像这样的 Java 15(Kotlin 代码):

scriptEngine = try {
            
    // Java >= 15

    org.openjdk.nashorn.api.scripting.NashornScriptEngineFactory().scriptEngine
} catch(e: UnsupportedClassVersionError) {

    // Java < 15

    @Suppress("DEPRECATION")
    jdk.nashorn.api.scripting.NashornScriptEngineFactory().scriptEngine
}

但是看起来错误没有被捕获。堆栈跟踪如下:

java.lang.UnsupportedClassVersionError: org/openjdk/nashorn/api/linker/NashornLinkerExporter has been compiled by a more recent version of the Java Runtime (class file version 59.0), this version of the Java Runtime only recognizes class file versions up to 55.0

我也 try catch NoClassDefFoundError 反转之前的 try/catch(加载 Java < 15 Nashorn,如果它不存在加载独立的)但错误是相同的。

编辑:看起来错误是由 Java < 15 Nashorn 本身抛出的。

最佳答案

这里是 Nashorn 维护者!我刚刚发布了Nashorn 15.2 ,与 15.1.1 相同,但现在使用 Java 11 编译。这意味着您现在可以将独立的 Nashorn 与 Java 11 及更高版本一起使用,而不必切换为 < 15 和 >= 15。我写了一个 page to explain如何在同时存在内置和独立 Nashorn 的 Java 11-14 上使用它。

关于java - Java < 15 和 >= 15 的不同 Nashorn 引擎?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66061017/

相关文章:

java - 打印在网络论坛上发布大量问题和大量答案的前 10 位用户

java - 返回值

java - 为什么我需要为 Integer 变量而不是 int 转换字符?

kotlin - Delegates.notNull 和 lateinit Kotlin 的区别

kotlin - kotlin-gradle-plugin 如何使用 'kotlin.code.style' 属性?

android - 地方 : No PlaceSelectionListener is set. 没有结果将被传递

javascript - Java - ScriptEngineManager nashorn Math.random 不起作用

java - 在 Windows 中设置 Eclipse 以进行 Cytoscape 插件开发

Java类的函数和成员

java - 如何为 jjs/Nashorn javascript 指定 CLASSPATH?