尝试创建 EXE 文件时出现“无法为 javascript 创建 javax 脚本引擎”错误

hel*_*rld 6 java netbeans javafx java-17 netbeans-13

我在尝试使用 Netbeans 13 生成 .exe 文件时遇到了这个问题。(打包为 -> 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)
Run Code Online (Sandbox Code Playgroud)

有谁知道这里似乎有什么问题以及如何解决它?

更新:

操作系统:Windows 10

JavaFX:javafx-sdk-17.0.2

JDK:jdk-17.0.2

我在期待什么?

  • 我期待 .exe 文件

确实不需要发布代码,因为构建项目和运行项目本身都很顺利(没有错误)。尝试使用 Package As -> EXE Installer 生成 .exe 安装程序文件后出现问题(如图所示):所采取的行动

您可以返回查看完整错误,当我打开 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">
Run Code Online (Sandbox Code Playgroud)

其中第 428 行是:

<target name="-jfx-copylibs" depends="init,compile,-pre-pre-jar,-pre-jar,-jfx-copylibs-warning" unless="fallback.no.javascript">
        <jfx-copylibs-js-impl/>
Run Code Online (Sandbox Code Playgroud)

第 436 行是:

    <pathconvert property="run.classpath.without.build.classes.and.dist.dir">
Run Code Online (Sandbox Code Playgroud)

jew*_*sea 8

您尝试做的事情根本不会按照您尝试做的方式进行:

  1. NetBeans Package as EXE 工具(当前)已过时。

  2. 它不适用于现代 Java 和 JavaFX 版本。

  3. 它使用 JDK 中的 JavaScript,该 JavaScript 在JDK 15中已从 JDK 中删除。

  4. 它使用javafxpackager 工具和 ant javafx 任务,这些任务在 JDK 中已不再存在,并在 JDK 16 中被jpackage取代。

  5. 它依赖于将 JavaFX 打包在类路径上的一个大 jar 中,这是自Java 11以来不受支持的执行配置,当时 JavaFX 从 Oracle JDK 发行版中删除并作为一组模块分发。

  6. 它依赖于现已过时的第三方 Wix 和 InnoSetup 软件版本。

NetBeans 导出到 EXE 功能的文档指出:

本教程需要审核。您可以打开 JIRA 问题,或按照这些贡献指南在 GitHub 中编辑它。

需要审查的原因是,该功能无法像当前在 NetBeans 中针对最新 Java 和 JavaFX 版本实现的那样工作。如果您可以获得兼容的第 3 方软件来支持其使用,它可能适用于 Oracle 过时的 Java 8 版本。您可能需要编写应用程序以使用 Oracle Java 8,并需要 IDE 和应用程序构建过程在 Oracle Java 8 下运行(这对于最新的 NetBeans 版本可能无法实现)。

对于替代方案,请研究JavaFX 标记中的打包资源

  • 只有您的构建和打包被破坏,而不是您的所有代码,您选择做什么取决于您。 (2认同)
  • 就我个人而言,我会[在Idea中创建一个新项目](https://www.jetbrains.com/help/idea/javafx.html),然后将代码复制到新项目中,确保它有效,然后学习如何打包它要么作为[可运行的exe](/sf/ask/4886798101/ -jr),或 [jlink zip](https://github.com/openjfx/javafx-maven-plugin#javafxjlink-options) 或作为 [已安装的应用程序](https://github.com/dlemmermann/JPackageScriptFX) 。 (2认同)
  • 不幸的是,这个方法不再起作用了,我有一个具有许多依赖项的 java8 项目,将其转换为 java19 很痛苦。java 团队的决定使 javafx 成为部署上有问题的技术...... (2认同)