当前为Java16版本,Java15版本请转到主分支
若你实在没有办法处理非模块化的第三方依赖及分裂包相关的模块化问题,可以参考KtFX-Lets-Plot 的non-modular分支实现,使用了The Badass Runtime Plugin 插件来对非模块化项目进行构建,仅支持Gradle,体积会大不少
- 命令行环境:
set JAVA_HOME="C:\CommandLineTools\Java\jdk-16",PowerShell中设置的临时环境变量对mvn无效,在cmd中设置的有效 - IDEA:
- Gradle:Settings -> Build, Execution, Deployment -> Build Tools -> Gradle -> 指定Gradle JVM为Java16
- Edit Configurations:JVM options -> (方式二需要在此添加参数)
使用gradle自定义任务拼接命令进行打包(不要变动项目的gradle版本设置,同时请确认gradle运行在java16环境下)
- 构建EXE镜像 ->
gradlew package2Image - 构建MSI安装包 ->
gradlew package2Installer
- 构建EXE镜像 ->
gradlew jpackageImage - 构建安装包(MSI、EXE) ->
gradlew jpackage
本方式目前的配置只够建出了镜像,如果要构建出安装包需要自行调整和补充插件org.codehaus.mojo:exec-maven-plugin的配置项,包括--icon参数在macOS平台上需要改成icns文件的路径
- 构建
jar包(本步骤会自动拷贝项目所需第三方依赖到target/alternateLocation目录下) ->mvn package - 构建
jpackage命令执行打包 ->mvn exec:exec
- 下面的命令都是基于
gradle assemble(jar)构建出的jar包路径(build目录)来执行,如果使用mvn package需要自行替换对应的jar包路径(target目录)。 - maven版本的相关插件正常使用(
mvn javafx:run、mvn javafx:jlink) - 下述命令切换到其他平台应该通用(未测试)。
C:\CommandLineTools\Java\jdk-16\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-16\lib;C:\Users\icuxika\.m2\repository\com\jfoenix\jfoenix\9.0.10\jfoenix-9.0.10.jar" -m "sample/com.icuxika.MainApp"
C:\CommandLineTools\Java\jdk-16\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-16;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-16\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-16;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
生成exe
C:\CommandLineTools\Java\jdk-16\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-16\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