手动构建JavaFX SceneBuilder

目录:GUI编程  |  标签:JavaJavaFX  |  发表于:2025-01-30 11:00:58

目前JavaFX和SceneBuilder这两个项目都是由Gluon维护的,然而对于SceneBuilder设计器,官网只给出了使用JDK21的最新版本下载链接,维护老项目时会遇到些讨厌的兼容性问题。Github上也没有提供17及之前的版本下载,旧版本可能被删除或不再免费提供下载了。我这里需要的是17.0.0版本,所以需要手动拉取代码构建,你如果需要的是其它更老的版本,步骤大概也是类似的。

准备JDK 17和JavaFX SDK 17

JDK随便选择一个预编译版本的OpenJDK即可,我这里使用的是Amazon Corretto JDK 17

JavaFX SDK 17可以在Gluon的官方下载,注意需要选择jmods版本。

拉取代码和编译

从官方的Github仓库拉取代码,拉取完成后需要切换到17.0.0这个Tag。

git checkout 17.0.0

然后我们导入IDE,执行mvn package,这一步基本不会有什么问题。编译完成后,会在app/target/lib下生成一个scenebuilder-17.0.0-all.jar文件。

执行构建脚本

虽然官方没有对如何构建SceneBuilder详细说明,但代码库里提供了.github/workflow/win.yml这个CI配置,我们可以参考它在我们自己的电脑上构建这个软件。

查看配置可以发现它其实需要执行.github/scripts/jpackage.bat脚本文件,我们在自己的电脑上手动执行它就行了。不过这个脚本比较复杂而且编写的比较简陋,很多环境变量和命令行参数如果没有正确配置就可能发生各种难以定位的异常,如果执行到某一步报错,我们可以手动再执行下该命令,查看是否是缺少环境变量或是某个参数指定的不对。

执行前,我们需要设置一些环境变量,这些环境变量需要指定到你自己电脑对应的路径上,下面是一个例子。

set JAVA_HOME=D:\DevSDK\jdk17.0.12_7
set JAVAFX_HOME=D:\DevSDK\javafx-jmods-17.0.14
set VERSION=17.0.0
set MAIN_CLASS=com.oracle.javafx.scenebuilder.app.SceneBuilderApp
set INSTALL_DIR=I:\test

还有一个GITHUB_WORKSPACE环境变量,这个建议直接删除,也就是说脚本第1行我们把它改成下面这个样子。

for /F %%i in ('%JAVA_HOME%\bin\jdeps --module-path %JAVAFX_HOME% --print-module-deps --ignore-missing-deps app/target/lib/scenebuilder-%VERSION%-all.jar') do SET JDEPS_MODULES=%%i

此外,脚本第13行还有个JPACKAGE_HOME,JDK17本来就有jpackage命令行工具,我们把它直接修改成JAVA_HOME

%JAVA_HOME%\bin\jpackage ^

构建脚本中默认以MSI方式构建Windows平台的SceneBuilder软件安装程序,这需要额外安装WiX toolset,如果你对Windows开发比较熟悉并已经安装了WiX toolset 3+版本,现在直接执行脚本应该就可以了,但如果你不知道我在说什么,那还需要改一下jpackage构建的目标,将构建目标从安装包改为简单的未被制作为安装包的可执行程序,这需要将最后一条jpackage命令改为如下内容。

%JAVA_HOME%\bin\jpackage ^
--app-version %VERSION% ^
--input app/target/lib ^
--main-jar scenebuilder-%VERSION%-all.jar ^
--main-class %MAIN_CLASS% ^
--name SceneBuilder ^
--description "Scene Builder" ^
--vendor Gluon ^
--verbose ^
--runtime-image app/target/runtime ^
--dest %INSTALL_DIR% ^
--type app-image ^
--java-options "--add-opens=javafx.fxml/javafx.fxml=ALL-UNNAMED" ^
--java-options "-Djava.library.path=runtime\bin;runtime\lib" ^
--icon app/assets/windows/icon-windows.ico ^

其中,type app-image指定构建类型是未制成安装包的可执行程序,此外我们还删除了几个和安装包制作有关的选项,如果不删除可能会报错。

现在我们可以执行构建脚本了,切换到项目根目录,在CMD中运行下面命令。

.\.github\scripts\jpackage.bat

如果一切正常,应该可以看到软件的exe可执行文件和相关依赖被输出到了%INSTALL_DIR%下。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap