2 Star 2 Fork 0

icuxika / JavaFX-Package-Sample

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

JavaFX 打包示例(还没完全测试)

当前为Java18版本,其他版本请切换分之查看

一些变动

  • 移除了JFoenix(已不再更新,在新版本jdk中,许多类已不兼容模块化相关变更),使用MaterialFX 作为示例使用的控件库
  • 因为移除了JFoenix,所以项目也移除了有关--add-exports或是--add-opens的配置,如果后续使用第三方库或者jdk本身内部库的时候,遇到了相关错误,可以查看17及之前的版本的配置是怎么配置的
  • 添加了有关i18n的配置,支持各控件StringProperty进行属性绑定使用,并通过AppResource.setLanguage(Locale.SIMPLIFIED_CHINESE); 来进行语言动态切换
  • 有关客户端其他常用封装,可以参考IMFrameworkFX
    • 如何封装一个Http请求工具类,可以查看com.icuxika.api.API类,支持对类似Spring Boot后端返回的json数据自动泛型转换对应实体类,并且提供了文件下载的进度显示,以及请求上传的进度显示的支持
    • 通过注解来使用FXML,并支持一个属性变更动态切换不同主题css样式文件,可以查看com.icuxika.AppView

若你实在没有办法处理非模块化的第三方依赖及分裂包相关的模块化问题,可以参考使用The Badass Runtime Plugin 插件来对非模块化项目进行构建

准备工作

  • 命令行环境:set JAVA_HOME="jdk18主目录",PowerShell中设置的临时环境变量对mvn无效(不是很确定,但你要考虑这一因素),在cmd中设置的有效
  • IDEA:
    • Gradle:Settings -> Build, Execution, Deployment -> Build Tools -> Gradle -> 指定Gradle JVM为Java18
  • Windows:需要安装 WIX TOOLSET ,并将其bin目录添加到环境变量中
  • 其他平台缺失的包一般可以根据提示通过包管理器直接安装

方式一(Gradle Task)

当前配置下,此方式(包括Gradle方式的手动版)存在问题,原因是,使用com.gluonhq.gluonfx-gradle-plugin插件需要依赖org.openjfx.javafxplugin插件,这种情况会产生两个依赖, 如javafx-basejavafx:base:mac,然后Java默认的模块化系统读取的时候就会从两个包中发现两个一样的模块从而产生错误。解决方式:一、方式二不受此问题影响;二:不需要使用GraalVm的情况下,注释掉 com.gluonhq.gluonfx-gradle-pluginorg.openjfx.javafxplugin插件,然后注释掉对应的javafx依赖配置块与gluonfx配置块,最后手动在dependencies中设置JavaFX的依赖。

使用gradle自定义任务拼接命令进行打包(不要变动项目的gradle版本设置,同时请确认gradle运行在java18环境下)

  • 构建镜像 -> gradlew package2Image
  • 构建安装包 -> gradlew package2Installer

方式二(Badass JLink Plugin,只支持Gradle)

  • 构建镜像 -> gradlew jpackageImage
  • 构建安装包 -> gradlew jpackage

方式三(Maven Exec)

平台图标文件类型

  • Windows: ico
  • macOS: icns
  • Linux: png

resources目录下已经存在了各个图标文件,需要配置org.codehaus.mojo:exec-maven-plugin插件在不同平台下--icon参数的值,如:${project.basedir}/src/main/resources/application.icns

  • 重新构建请先执行mvn clean
  • 构建jar包(本步骤会自动拷贝项目所需第三方依赖到target/alternateLocation目录下) -> mvn package
  • 构建镜像 -> mvn exec:exec@image
  • 构建安装包 -> mvn exec:exec@installer

方式四(手动构建,为方式一的手动版)

当前版本待测试

  • 下面的命令都是基于gradle assemble(jar)构建出的jar包路径(build目录)来执行,如果使用mvn package需要自行替换对应的jar包路径(target目录)。
  • maven版本的相关插件正常使用(mvn javafx:runmvn javafx:jlink
  • 下述命令切换到其他平台请自行替换,此项目在macOS、Windows、Deepin上运行过,相关平台样式的命令都存在。

执行(以下命令中-p参数的值,可以使用gradle printDependentJarsList的结果来替换)

C:\CommandLineTools\Java\jdk-17\bin\java.exe --add-exports javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix -p ".\build\libs\JavaFX-Package-Sample-1.0.0.jar;C:\CommandLineTools\Java\javafx-sdk-17\lib;C:\Users\icuxika\.m2\repository\com\jfoenix\jfoenix\9.0.10\jfoenix-9.0.10.jar" -m "sample/com.icuxika.MainApp"

构建出安装包(WIX TOOLSET)

C:\CommandLineTools\Java\jdk-17\bin\jpackage.exe -n JavaFXSample --java-options "--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix" -p ".\build\libs\JavaFX-Package-Sample-1.0.0.jar;C:\CommandLineTools\Java\javafx-jmods-17;C:\Users\icuxika\.m2\repository\com\jfoenix\jfoenix\9.0.10\jfoenix-9.0.10.jar" -m "sample/com.icuxika.MainApp" --icon ./src/main/resources/application.ico --app-version 1.0.0 --dest ./build/build-direct-package --temp ./build/build-direct-package/temp --win-dir-chooser --win-menu --win-menu-group JavaFXSample --win-shortcut

构建出镜像

C:\CommandLineTools\Java\jdk-17\bin\jpackage.exe --type app-image -n JavaFXSample --java-options "--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix" -p ".\build\libs\JavaFX-Package-Sample-1.0.0.jar;C:\CommandLineTools\Java\javafx-jmods-17;C:\Users\icuxika\.m2\repository\com\jfoenix\jfoenix\9.0.10\jfoenix-9.0.10.jar" -m "sample/com.icuxika.MainApp" --icon ./src/main/resources/application.ico --app-version 1.0.0 --dest ./build/build-direct-app-package

【补充】利用mvn javafx:jlink构建出的镜像来构建可执行程序(pom.xml插件里已经指定了--add-exports等参数,但是此命令依旧需要加,java15时却是不需要的)

生成exe

C:\CommandLineTools\Java\jdk-17\bin\jpackage.exe --type app-image -n JavaFXSample --java-options "--add-exports=javafx.controls/com.sun.javafx.scene.control.behavior=com.jfoenix" -m "sample/com.icuxika.MainApp" --icon "./src/main/resources/application.ico" --runtime-image "./target/build-link/" --dest "./target/build-package"

构建出安装包

C:\CommandLineTools\Java\jdk-17\bin\jpackage.exe -n JavaFXSample --app-image ./target/build-package/JavaFXSample --app-version 1.0.0 --dest ./target/build-link-package --temp ./target/build-link-package/temp --win-dir-chooser --win-menu --win-menu-group JavaFXSample --win-shortcut

方式五(GraalVM)

Windows版本待测试

说明

  • 下载
  • 配置环境变量 export GRAALVM_HOME=export GRAALVM_HOME=/Users/icuxika/CommandLineTools/graalvm-ce-java17-22.0.0.2/Contents/Home
  • 22.0.0.2 没有此操作也未影响后面的步骤)执行 $GRAALVM_HOME/bin/gu --jvm install native-image
  • GraalVM Community 22.0目前并不支持在java18的环境下进行运行,因此<maven.compiler.release>17</maven.compiler.release>项目依旧需要使用java17,如果你不使用GraalVM,则可以更改为18
  • 初次执行,会有Downloading JavaFX static libs...的过程,此下载可能需要翻墙
  • 除了GRAALVM_HOME的配置,你应当确保JAVA_HOME也正确配置
  • 建议在命令行操作,方便测试不同环境变量下的效果
构建
  • mvn gluonfx:build
  • gradle nativeBuild
运行
  • mvn gluonfx:run
  • gradle nativeRun
小问题

macOS上mvn gluonfx:rungradle nativeRun不会报告任何错误,但直接双击生成的程序运行时,关联的控制台窗口会报告 java.lang.NoSuchMethodError: com.sun.glass.ui.mac.MacAccessible.accessibilityAttributeNames,但不会影响程序的运行

空文件

简介

最新版本请查看 https://github.com/icuxika/JavaFX-Package-Sample 展开 收起
Java
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/icuxika/JavaFX-Package-Sample.git
git@gitee.com:icuxika/JavaFX-Package-Sample.git
icuxika
JavaFX-Package-Sample
JavaFX-Package-Sample
java18

搜索帮助