Ошибка «Невозможно создать механизм сценариев javax для javascript» при попытке создать EXE-файл
Я столкнулся с этой проблемой при попытке создать файл .exe с помощью Netbeans 13.(Пакет как -> установщик exe)
Полная ошибка:
C:\Users\*\Documents\NetBeansProjects\*\nbproject\build-native.xml:428: The following error occurred while executing this line:
C:\Users\*\Documents\NetBeansProjects\*\nbproject\build-native.xml:436: Unable to create javax script engine for javascript
BUILD FAILED (total time: 4 seconds)
Кто-нибудь знает, в чем здесь проблема и как ее исправить?
ОБНОВИТЬ:
ОС: Виндовс 10
JavaFX: javafx-sdk-17.0.2
JDK: jdk-17.0.2
Чего я ожидаю?
- Я ожидаю .exe файл
На самом деле нет необходимости публиковать код, потому что сборка проекта и запуск самого проекта проходят гладко (без ошибок). Проблема возникает после попытки создать установочный файл .exe с помощью Package As -> EXE Installer (как показано на рисунке):
Вы можете вернуться, чтобы увидеть полную ошибку, и когда я открываю файл build-native.xml, он указывает мне на эти строки кода:
<target name="-jfx-copylibs" depends="init,compile,-pre-pre-jar,-pre-jar,-jfx-copylibs-warning" unless="fallback.no.javascript">
<jfx-copylibs-js-impl/>
</target>
<target name="-jfx-copylibs-warning" if="fallback.no.javascript">
<echo message="Warning: Dependent Libraries copy (-jfx-copylibs) skipped in fallback build mode due to JDK missing JavaScript support."/>
</target>
<macrodef name="jfx-copylibs-js-impl">
<sequential>
<local name="run.classpath.without.build.classes.and.dist.dir"/>
<pathconvert property="run.classpath.without.build.classes.and.dist.dir">
<path path="${run.classpath}"/>
<map from="${basedir}${file.separator}${build.classes.dir}" to=""/>
<map from="${basedir}${file.separator}${dist.jar}" to=""/>
<scriptmapper language="javascript">
Где строка 428:
<target name="-jfx-copylibs" depends="init,compile,-pre-pre-jar,-pre-jar,-jfx-copylibs-warning" unless="fallback.no.javascript">
<jfx-copylibs-js-impl/>
А где строка 436:
<pathconvert property="run.classpath.without.build.classes.and.dist.dir">
2 ответа
То, что вы пытаетесь сделать, просто не будет работать так, как вы пытаетесь это сделать:
Средство NetBeans Package as EXE (в настоящее время) устарело.
Он не будет работать с современными версиями Java и JavaFX.
Он использует JavaScript из JDK, который был удален из JDK в JDK 15 .
Он использует инструмент javafxpackager и задачи ant javafx , которые больше не существуют в JDK и были заменены jpackage в JDK 16.
Он основан на том, что JavaFX упакован в один большой jar на пути к классам, что является неподдерживаемой конфигурацией выполнения, начиная с Java 11 , когда JavaFX был удален из дистрибутива Oracle JDK и распространялся в виде набора модулей.
Он основан на версиях стороннего программного обеспечения Wix и InnoSetup, которые сейчас устарели.
В документации по функции экспорта NetBeans в EXE указано:
Этот учебник нуждается в обзоре. Вы можете открыть задачу JIRA или отредактировать ее в GitHub, следуя этим рекомендациям.
Причина, по которой требуется проверка, заключается в том, что эта функция не будет работать в том виде, в каком она реализована в настоящее время в NetBeans для последних версий Java и JavaFX. Это может работать для устаревших версий Java 8 от Oracle, если вы можете получить совместимое стороннее программное обеспечение для поддержки его использования. Скорее всего, вам потребуется, чтобы ваше приложение было написано для использования Oracle Java 8, а среда IDE и процесс сборки приложения работали под управлением Oracle Java 8 (что может быть невозможно для последних версий NetBeans).
В качестве альтернативы изучите ресурсы упаковки в теге JavaFX .
Я столкнулся с той же проблемой при попытке запустить проект, который я создал с использованием Java 8, с Java 19.
Что вы можете сделать, так это загрузить Java 8 и добавить ее в свой Netbeans в качестве новой платформы Java, в ней будут присутствовать пакеты JavaFX, и вам не нужно будет настраивать библиотеки JavaFX отдельно.
Вы можете загрузить Java 8 JDK с https://www.azul.com/downloads/
, в списке пакетов Java выберите JDK FX.