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

iam*_*gio 4 java kotlin nashorn java-15

我正在尝试找到一种解决方法,使 Nashorn 与 1.8 以上的每个 Java 版本兼容,正如我之前提出的另一个问题中所述。
我目前正在尝试捕获UnsupportedClassVersionError系统是否能够运行独立的 Java 15 Nashorn,如下所示(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
}
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

Att*_*edi 6

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