Как я могу продолжать использовать Javascript в Java 15 и новее

В моем Java-приложении небольшая важная функция - это возможность переименовывать аудиофайлы на основе их метаданных (например, название альбома / исполнителя), а маска указывается с использованием Javascript, что обеспечивает очень гибкую и мощную функцию переименования.

Я знал, что Javascript устарел, но теперь кажется, что он действительно будет удален из Java 15 и далее. Эта потеря функциональности может стать для меня серьезной проблемой, поэтому я спрашиваю, даже если он официально удален, есть ли способ продолжить использование Javascript в приложении Java 15, т.е. будет ли он доступен как плагин 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;
}

2 ответа

Решение

Вы можете запустить движок JavaScript GraalVM на любой JVM в виде набора зависимостей, извлеченных из 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).

Вы можете использовать отдельную версию Nashorn: https://github.com/openjdk/nashorn.

Nashorn — это модуль JPMS, поэтому убедитесь, что он и его транзитивные зависимости (Nashorn зависит от нескольких JAR-файлов ASM) находятся в пути модуля вашего приложения, или соответствующим образом добавлены на модульный уровень, или иным образом настроены как модули.

Хотя автономный Nashorn в первую очередь предназначен для использования с Java 15 и более поздними версиями, его также можно использовать с версиями Java с 11 по 14 , которые также имеют встроенную версию Nashorn. См. эту страницу для получения подробной информации об использовании, когда присутствуют обе версии.

Другие вопросы по тегам