使用 Launch4j VM 参数路径包装的 JavaFX 项目
JavaFX project wrapped with Launch4j VM arguments path
对于我的一些项目,我将 JavaFX 用于 GUI,在将 JavaFX 拆分为 OpenJFX 之前,我没有遇到任何问题。现在我想使用 JDK 和 JavaFX 的最新版本,因此必须进行一些更改。
在 Eclipse 中工作时,一切正常 运行,我添加了 JavaFX 作为库,但是当我尝试使用 Launch4j 从可运行的 jar 创建 exe 文件时遇到了一些问题。在 Eclipse 中,我使用了 2 个 VM 参数:
- --module-path "lib 文件夹的路径\" --add-modules javafx.controls,javafx.graphics,javafx.fxml
- 这是针对 造成的:java.lang.NoClassDefFoundError:javafx/application/Application
- --add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED
- 这是因为 无法访问 class com.sun.glass.ui.Window(在模块 javafx.graphics 中),因为模块 javafx.graphics 可以不导出 com.sun.glass.ui 到未命名的模块
对于第二个参数,我没有任何问题,因为它不需要库的路径,但第一个需要,而且我不能简单地使用静态路径(例如:C: \MyAppName\lib) 因为用户可以将应用程序安装在他想要的位置,并且也会有库。话虽如此,我可以使用什么作为相对路径,以便 Launch4j 知道该怎么做? lib 文件夹与 exe 位于同一位置。
我尝试了以下但没有成功(我已将它们添加到 JVM 选项框中):
- --模块路径 "%EXEDIR%\lib" --add-modules javafx.controls,javafx.graphics,javafx.fxml
- --module-path "./lib" --add-modules javafx.controls,javafx.graphics,javafx.fxml
- --module-path "\lib" --add-modules javafx.controls,javafx.graphics,javafx.fxml
这个问题可能有一些细节可能与我所需要的无关,但也许其他人也有同样的问题,我想添加它们,以便在我得到答案时也能帮助他们。
按照@James_D的建议,我实际上使用了jpackage
而不是Launch4j
而且更好,它不仅创建了你的exe文件,而且还消除了对用户通过以特定于平台的格式创建本机包来安装 Java。
也就是说,这是关于 Windows 10 OS 的小指南,介绍如何将 jpackage
用于 JavaFX 项目。有关更多信息,请阅读 documentation。 jpackage
适用于 macOS 和 Linux,但我使用的是 Windows 10,因此该指南是针对它的。
- 到下面link(官方)下载JavaFX Windows jmods;
- 对于
jpackage
您还需要下载WiX Toolset并安装;
- 为您的项目创建一个运行可用的 Jar。我发现使用 运行nable Jar 而不是普通 jar 更容易,因为您不必稍后指定主要 class。这是个人喜好,不是你必须做的;
- 在命令 line/Windows PowerShell 中尝试 运行ning
jpackage -h
以查看 jpackage
是否正常工作。如果你得到The term 'jpackage' is not recognized as name of a cmdlet,然后打开Environment variables并在System variables/Path 从您的 Java JDK 添加 bin 文件夹的位置。一个简单的方法是在 Windows 搜索栏中搜索 environment,然后选择 Edit the system environment variables,然后环境变量...
- 之后你可以运行:
jpackage -t exe --name "Name of app" --app-version 1.0 --input "Location of runnable Jar" --dest "Location where the exe will be created" --main-jar "Name of the runnable Jar, with extention .jar at the end" --icon "Complete location where the icon of the app is .ico" --module-path "Location of jmods folder" --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.base --win-shortcut --win-menu
示例:
jpackage -t exe --name "MyApp" --app-version 1.0 --input "D:\Projects\Jars\" --dest "D:\Projects\Executable" --main-jar "Guide.jar" --icon "D:\Projects\Icons\guide.ico" --module-path "D:\Projects\JavaFX\javafx-jmods-16" --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.base --win-shortcut --win-menu
- 在我的例子中,我使用的是我的个人安装程序应用程序,所以我在 运行ning
jpackage
之后所做的就是 运行ning exe 文件被创建,然后从它创建的文件夹中,我复制了该文件夹中的文件(exe 文件,app 和 运行time 文件夹)并将它们粘贴到包含我的项目的所有其他必要文件的位置。这样我就可以对其进行测试,如果它有效,我将继续为它创建安装程序,就像我说的那样,使用我自己的安装程序应用程序。
这个命令有很多选项可以添加,所以请阅读 documentation,以及 运行ning jpackage -h
.[=25 的完整选项列表=]
在我的例子中,我将 javafx 放在 jre 目录中,然后 --module-path "jre\jafafx\lib" 获取正确的库:
这是配置:
这是文件树:
对于我的一些项目,我将 JavaFX 用于 GUI,在将 JavaFX 拆分为 OpenJFX 之前,我没有遇到任何问题。现在我想使用 JDK 和 JavaFX 的最新版本,因此必须进行一些更改。
在 Eclipse 中工作时,一切正常 运行,我添加了 JavaFX 作为库,但是当我尝试使用 Launch4j 从可运行的 jar 创建 exe 文件时遇到了一些问题。在 Eclipse 中,我使用了 2 个 VM 参数:
- --module-path "lib 文件夹的路径\" --add-modules javafx.controls,javafx.graphics,javafx.fxml
- 这是针对 造成的:java.lang.NoClassDefFoundError:javafx/application/Application
- --add-opens javafx.graphics/com.sun.glass.ui=ALL-UNNAMED
- 这是因为 无法访问 class com.sun.glass.ui.Window(在模块 javafx.graphics 中),因为模块 javafx.graphics 可以不导出 com.sun.glass.ui 到未命名的模块
对于第二个参数,我没有任何问题,因为它不需要库的路径,但第一个需要,而且我不能简单地使用静态路径(例如:C: \MyAppName\lib) 因为用户可以将应用程序安装在他想要的位置,并且也会有库。话虽如此,我可以使用什么作为相对路径,以便 Launch4j 知道该怎么做? lib 文件夹与 exe 位于同一位置。
我尝试了以下但没有成功(我已将它们添加到 JVM 选项框中):
- --模块路径 "%EXEDIR%\lib" --add-modules javafx.controls,javafx.graphics,javafx.fxml
- --module-path "./lib" --add-modules javafx.controls,javafx.graphics,javafx.fxml
- --module-path "\lib" --add-modules javafx.controls,javafx.graphics,javafx.fxml
这个问题可能有一些细节可能与我所需要的无关,但也许其他人也有同样的问题,我想添加它们,以便在我得到答案时也能帮助他们。
按照@James_D的建议,我实际上使用了jpackage
而不是Launch4j
而且更好,它不仅创建了你的exe文件,而且还消除了对用户通过以特定于平台的格式创建本机包来安装 Java。
也就是说,这是关于 Windows 10 OS 的小指南,介绍如何将 jpackage
用于 JavaFX 项目。有关更多信息,请阅读 documentation。 jpackage
适用于 macOS 和 Linux,但我使用的是 Windows 10,因此该指南是针对它的。
- 到下面link(官方)下载JavaFX Windows jmods;
- 对于
jpackage
您还需要下载WiX Toolset并安装; - 为您的项目创建一个运行可用的 Jar。我发现使用 运行nable Jar 而不是普通 jar 更容易,因为您不必稍后指定主要 class。这是个人喜好,不是你必须做的;
- 在命令 line/Windows PowerShell 中尝试 运行ning
jpackage -h
以查看jpackage
是否正常工作。如果你得到The term 'jpackage' is not recognized as name of a cmdlet,然后打开Environment variables并在System variables/Path 从您的 Java JDK 添加 bin 文件夹的位置。一个简单的方法是在 Windows 搜索栏中搜索 environment,然后选择 Edit the system environment variables,然后环境变量... - 之后你可以运行:
jpackage -t exe --name "Name of app" --app-version 1.0 --input "Location of runnable Jar" --dest "Location where the exe will be created" --main-jar "Name of the runnable Jar, with extention .jar at the end" --icon "Complete location where the icon of the app is .ico" --module-path "Location of jmods folder" --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.base --win-shortcut --win-menu
示例:
jpackage -t exe --name "MyApp" --app-version 1.0 --input "D:\Projects\Jars\" --dest "D:\Projects\Executable" --main-jar "Guide.jar" --icon "D:\Projects\Icons\guide.ico" --module-path "D:\Projects\JavaFX\javafx-jmods-16" --add-modules javafx.controls,javafx.graphics,javafx.fxml,javafx.base --win-shortcut --win-menu
- 在我的例子中,我使用的是我的个人安装程序应用程序,所以我在 运行ning
jpackage
之后所做的就是 运行ning exe 文件被创建,然后从它创建的文件夹中,我复制了该文件夹中的文件(exe 文件,app 和 运行time 文件夹)并将它们粘贴到包含我的项目的所有其他必要文件的位置。这样我就可以对其进行测试,如果它有效,我将继续为它创建安装程序,就像我说的那样,使用我自己的安装程序应用程序。
这个命令有很多选项可以添加,所以请阅读 documentation,以及 运行ning jpackage -h
.[=25 的完整选项列表=]
在我的例子中,我将 javafx 放在 jre 目录中,然后 --module-path "jre\jafafx\lib" 获取正确的库:
这是配置:
这是文件树: