在我的Java应用程序中,一项重要的小功能是能够根据音频文件的元数据来重命名音频文件(例如专辑/艺术家标题),并且使用 Javascript 指定了掩码,这提供了非常灵活而强大的重命名功能。

我知道Javascript已被弃用,但现在看来实际上将要从Java 15起将其删除。对我来说,这种功能丧失可能是一个主要问题,所以我问,即使它被正式删除,是否有办法可以继续在Java 15应用程序中使用Javascript,即它将作为opensrc插件提供,可以在以下位置使用?我自己承担风险。对我而言,开发已停止在Ecmascript 5.1上的事实并不重要。

有人提到使用 GraalVM ,但没有说明如何做到这一点,我认为这与我的方案不符,特别是我的应用程序在某些32位Arm环境中可用,而GraalVM在32位环境中不可用。

我已经从Java 11迁移到Java 14,以解决其他一些问题,因此我无法真正回到Java 11,并且由于Java 14不是LTS版本,因此我无法长期坚持使用Java 14。

这是我的大部分Javascript代码

try
{
    mask = includeUserDefinedFunctions(mask);
    ScriptEngine engine = manager.getEngineByName("JavaScript");
    for(SongFieldName next:SongFieldName.values())
    {
        if(next.getScriptVar()!=null && next.getSongFieldKey()!=null)
        {
            engine.put(next.getScriptVar(), cleanValue(song.getFieldValueSpaceSeparatedOrEmptyString(next.getSongFieldKey()), song));
        }
    }
    String result = (String)engine.eval(mask);
    return result;
}
catch(ScriptException se)
{
    throw se;
}

最佳答案

您可以在任何JVM上将GraalVM的JavaScript引擎作为从Maven Central提取的一堆依赖项来运行。这是一个示例:https://github.com/graalvm/graaljs/blob/master/docs/user/RunOnJDK.md

没有GraalVM编译器的情况会更慢,因为用于GraalVM的语言实现框架需要编译器提供的某些api,而afaik不在其他JIT中。

如果您打算迁移应用程序以使用GraalVM的JavaScript,如果您使用某些Nashorn功能,则该功能可能无法在代码中发挥作用,请考虑从--nashorn-compatibility-mode开始(此处有更多详细信息:https://github.com/graalvm/graaljs/blob/master/docs/user/NashornMigrationGuide.md)。

10-06 13:00