Skip to content

Latest commit

 

History

History
114 lines (92 loc) · 7.51 KB

Windows下手动构建的演示.md

File metadata and controls

114 lines (92 loc) · 7.51 KB

使用jpackage命令在Windows平台手动构建可执行程序和安装程序

生成项目jar包(无法简单的通过java -jar执行)

gradle -> .\build\libs\JavaFX-Package-Sample-1.0.0.jar

.\gradlew.bat clean
.\gradlew.bat assemble

maven -> .\target\JavaFX-Package-Sample-1.0.0.jar

mvn clean
mvn package

mvn package执行时会将项目依赖的jar包拷贝到.\target\alternateLocation\

通过java命令来运行应用程序

gradle

先执行.\gradlew.bat copyDependencies将项目依赖的jar包拷贝到.\build\modules\

C:\CommandLineTools\Java\jdk-21\bin\java.exe -p ".\build\libs\;.\build\modules\" -m "sample/com.icuxika.MainApp"

maven

C:\CommandLineTools\Java\jdk-21\bin\java.exe -p ".\target\JavaFX-Package-Sample-1.0.0.jar;.\target\alternateLocation\" -m "sample/com.icuxika.MainApp"

通过jdeps命令可以显示项目依赖的模块

gradle

C:\CommandLineTools\Java\jdk-21\bin\jdeps.exe --print-module-deps --ignore-missing-deps --module-path .\build\modules\ .\build\libs\JavaFX-Package-Sample-1.0.0.jar

输出:MaterialFX,java.base

maven

C:\CommandLineTools\Java\jdk-21\bin\jdeps.exe --print-module-deps --ignore-missing-deps --module-path .\target\alternateLocation\ .\target\JavaFX-Package-Sample-1.0.0.jar

输出:MaterialFX,java.base

通过jlink构建出.bat形式的可执行程序

gradle -> .\build\jlink-build-dir\bin\JavaFX-Package-Sample.bat

C:\CommandLineTools\Java\jdk-21\bin\jlink.exe --module-path ".\build\libs\;.\build\modules\" --add-modules java.base,sample --launcher JavaFX-Package-Sample=sample/com.icuxika.MainApp --compress=zip-9 --no-header-files --no-man-pages --strip-debug --output .\build\jlink-build-dir

maven -> .\target\jlink-build-dir\bin\JavaFX-Package-Sample.bat

C:\CommandLineTools\Java\jdk-21\bin\jlink.exe --module-path ".\target\JavaFX-Package-Sample-1.0.0.jar;.\target\alternateLocation\" --add-modules java.base,sample --launcher JavaFX-Package-Sample=sample/com.icuxika.MainApp --compress=zip-9 --no-header-files --no-man-pages --strip-debug --output .\target\jlink-build-dir

通过jlink构建出的文件夹jlink-build-dir已经可以压缩一下发到其他电脑上运行了,.bat脚本也有许多方式能够直接转为.exe,目前jlink-build-dir目录的大小为89.7 MB

jpackage 使用一:以jlink命令构建出的目录jlink-build-dir为基础

gradle -> .\build\jpackage-build-dir\JavaFXSample\JavaFXSample.exe

C:\CommandLineTools\Java\jdk-21\bin\jpackage.exe --type app-image -n JavaFXSample -m "sample/com.icuxika.MainApp" --runtime-image .\build\jlink-build-dir\ --icon .\src\main\resources\application.ico --app-version 1.0.0 --dest .\build\jpackage-build-dir\

maven -> .\target\jpackage-build-dir\JavaFXSample\JavaFXSample.exe

C:\CommandLineTools\Java\jdk-21\bin\jpackage.exe --type app-image -n JavaFXSample -m "sample/com.icuxika.MainApp" --runtime-image .\target\jlink-build-dir\ --icon .\src\main\resources\application.ico --app-version 1.0.0 --dest .\target\jpackage-build-dir\

目前jpackage-build-dir大小为90.1 MB

jpackage 使用二:不以jlink构建结果为基础

gradle -> .\build\jpackage-direct-build-dir\JavaFXSample\JavaFXSample.exe

C:\CommandLineTools\Java\jdk-21\bin\jpackage.exe --type app-image -n JavaFXSample --module-path ".\build\libs\;.\build\modules\" -m "sample/com.icuxika.MainApp" --icon ./src/main/resources/application.ico --app-version 1.0.0 --dest .\build\jpackage-direct-build-dir

maven -> .\target\jpackage-direct-build-dir\JavaFXSample\JavaFXSample.exe

C:\CommandLineTools\Java\jdk-21\bin\jpackage.exe --type app-image -n JavaFXSample --module-path ".\target\JavaFX-Package-Sample-1.0.0.jar;.\target\alternateLocation\" -m "sample/com.icuxika.MainApp" --icon ./src/main/resources/application.ico --app-version 1.0.0 --dest .\target\jpackage-direct-build-dir

目前jpackage-direct-build-dir大小为182 MB

以下命令是构建Windows上msi格式的安装程序,需要配置WiX Toolset v3.11.2bin目录到环境变量PATH

jpackage 使用三:以jpackage 使用二的构建目录jpackage-direct-build-dir为基础

gradle -> .\build\jpackage-installer-dir\JavaFXSample-1.0.msi

C:\CommandLineTools\Java\jdk-21\bin\jpackage.exe --type msi -n JavaFXSample --app-image .\build\jpackage-direct-build-dir\JavaFXSample\ --dest .\build\jpackage-installer-dir --win-dir-chooser --win-menu --win-menu-group JavaFXSample --win-shortcut

maven -> .\target\jpackage-installer-dir\JavaFXSample-1.0.msi

C:\CommandLineTools\Java\jdk-21\bin\jpackage.exe --type msi -n JavaFXSample --app-image .\target\jpackage-direct-build-dir\JavaFXSample\ --dest .\target\jpackage-installer-dir --win-dir-chooser --win-menu --win-menu-group JavaFXSample --win-shortcut

目前JavaFXSample-1.0.msi的大小为65.9 MB

在jdk19、jdk20等版本有时候构建会遇到构建出的安装包是英文版本或者exited with 311 code的错误,请切换到java20分支此文件查看相应的解决方法,当前jdk21没有遇到这些问题

jpackage 使用四:不以jpackage 使用二的构建结果为基础

gradle -> .\build\jpackage-direct-installer-dir\JavaFXSample-1.0.0.msi

C:\CommandLineTools\Java\jdk-21\bin\jpackage.exe --type msi -n JavaFXSample --module-path ".\build\libs\;.\build\modules\" -m "sample/com.icuxika.MainApp" --icon ./src/main/resources/application.ico --app-version 1.0.0 --dest .\build\jpackage-direct-installer-dir\ --win-dir-chooser --win-menu --win-menu-group JavaFXSample --win-shortcut

maven -> .\target\jpackage-direct-installer-dir\JavaFXSample-1.0.0.msi

C:\CommandLineTools\Java\jdk-21\bin\jpackage.exe --type msi -n JavaFXSample --module-path ".\target\JavaFX-Package-Sample-1.0.0.jar;.\target\alternateLocation\" -m "sample/com.icuxika.MainApp" --icon ./src/main/resources/application.ico --app-version 1.0.0 --dest .\target\jpackage-direct-installer-dir\ --win-dir-chooser --win-menu --win-menu-group JavaFXSample --win-shortcut

目前JavaFXSample-1.0.msi的大小为65.9 MB

最后

jlinkjpackage两条命令最主要的使用方式和关键的参数都已经在上面了,不过本项目只演示了作为一个模块化项目时应用的方式,但是jpackage是支持为一个非模块化的可以通过java -jar运行的jar包生成对应的exe的。 Java模块化尤其是这种纯命令行的方式难以处理很多情况比如非模块化的依赖,甚至同时支持模块化导入和兼容非模块化的依赖有时也会遇到问题,我已经有好长时间没写过javafx相关的代码,jpackage除了几个玩具项目几乎也没怎么用到过,以这点经验来说,还是找一个合适的插件为好,更简单的方式是在grdle中使用The Badass Runtime Plugin这个插件来对非模块化项目打包,这样的话项目中不用维护一个module-info.java文件,也不用考虑在引入新的依赖各种模块的冲突问题了

使用 mvn,配置一下阿里仓库的镜像就几乎不会有网络问题了,但是更好用的maven插件你可能需要多上上Google才能发现

使用 gradle,最大的问题就是你需要学会翻墙,并在IDEA中配置代理,命令行中 gradlew.bat 命令结尾添加-D"https.proxyHost"=127.0.0.1 -D"https.proxyPort"=7890