Java开发过程中存在一个难题:分发自己的程序,需要客户电脑中已安装jre环境。如果用户在系统中没有要求的Java版本,则必须安装它。JavaFX提供新的部署选项称为自包含应用程序包(A self-contained application)。
A self-contained application is a wrapper for your JavaFX application, making it independent of what the user might have installed.
一个自包含应用包是一个包含Java应用和它的依赖的包,它使得应用可独立于用户可能安装的内容。
本文主要介绍如何使用IDEA打包,以及在打包过程中遇到的各种坑。我们可以直接将 java 程序打包成安装包,具体来说:
l Windows:exe,msi
l Mac:dmg,pkg
l Linux:deb,rpm
一、使用IDEA Artifact打包exe
1、添加Artifacts
“File Structure”—“Artifacts”,点击“+”添加“JavaFx application”—“From Module XXX”。
2、添加依赖
将右边模块及其依赖的底层模块下的jar包添加到左边(Put Into Output Root)
将右边依赖的底层模块打包到右边(Pack Into /xxx.jar)。
3、配置JavaFX打包信息
Application class中添加项目的启动类,将Native bundle设为all或image。
其他信息可不填:
Title:应用标题
Vendor:应用作者
4、构建Artifacts。
输出目录:out\artifacts\client\bundles\client
注意事项
1、 所有依赖项必须全部添加到左边,否则exe将无法执行。此时需
2、 JavaFX打包信息中不可以使用中文,否则构建会报错。
3、 IDEA Artifacts虽然可以打包各个系统的执行程序,但是在一个系统上只能打队友系统的安装包。比如在windows上,就只能打包成exe。
二、为JavaFX应用创建安装程序
1、首先需要下载两个工具
- exe4j,一个将jar转换成exe的工具
- inno setup,一个将依赖和exe一起打成一个安装程序的工具
2、maven把Springboot项打包
可以再IDEA的Terminal中直接输入命令或者用IDEA右侧的Maven工具。
3、打包成exe
先把exe4j.rar解压,根据自己系统版本运行安装程序,直接下一步到底,安装后运行。
设置执行权限和缩放
使用inno setup创建一个打包脚本。配置到最后一步会弹出问你是否马上编译,选择否,先把脚本写好再自己编译。
在下图位置加一行代码 #define MyJreName "runtime"
在[Files]下加一行代码
Source: "自己本地JRE路径\*"; DestDir: "{app}\{#MyJreName}"; Flags: ignoreversion recursesubdirs createallsubdirs
注意事项
1、 创建setup时打包的jre路径应该与打包成exe时自定义的jre路径保持一致,比如上图中的“runtime”。否则,安装后的exe程序会报错。
2、 在JVM启动参数上加上 -Dfile.encoding=UTF-8,强行设置系统文件编码格式为utf-8。
测试运行
使用VMware虚拟机
参考资料
记录一次Springboot项目打包成exe
其他打包参考如下资料:
第七部分:部署 你如何使用Eclipse和e(fx)clipse插件创建本地包。
IDEA打包
记录一次Springboot项目打包成exe
将idea中的JavaFX项目打包成可执行的exe应用