码迷,mamicode.com
首页 > 编程语言 > 详细

使用jpackage将java程序打包成exe程序(不需要安装jdk即可运行)

时间:2021-06-05 18:16:23      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:其他   说明   package   app   必须   版本   博客   网址   classpath   

1.安装wix 3.XX
下载二进制包(wix311-binaries.zip)解压并添加根目录路径到环境变量path中(D:\Program\openjdk\wix)
 
2.打包成便携执行程序(https://ravenxrz.ink/archives/421e5ad2.html)
目录结构
技术图片
在空白处按住shift,单击右键,选择“在此处打开powershell窗口”
执行
.\jdk-14.0.1\bin\jpackage -i .\planewar --type app-image -n planewar --main-jar .\planewar\plane-war-1.0-SNAPSHOT.jar --vendor cy --verbose --win-console
选项说明:
# -i: 存放待打包资源的文件夹
# -type: win下默认是exe,其他的有msi、app-image
# -n: 打包后的程序名称
# --main-jar 包含启动类(main)的jar包,如果jar包不是可执行的jar,则需要手动指定主类
# --main-class 手动指定主类,例如: --main-class com.xxx.AppMain
# --vendor 供应商信息(随便填)
# --verbose 显示打包过程
# --win-console 添加控制台输出

 

3.打包成安装程序
将需要打包的资源放进文件夹planewar
执行打包
.\jdk-14.0.1\bin\jpackage -i .\planewar -n planewar --main-jar .\planewar\plane-war-1.0-SNAPSHOT.jar --vendor cy --verbose --win-console --win-dir-chooser --win-shortcut
选项说明:
# -i 表示输入文件夹
# -n 表示应用名称
# --main-jar 指定jar包,需要jar已经指定main类,否则需要添加--main-class手动指定,如:--main-class com.demo.DemoApplication
# --vendor 发行商信息
# --verbose 显示打包执行过程
# --win-console 使用控制台输出
# --win-dir-chooser 选择安装位置
# --win-shortcut 创建快捷方式
#其他的选项如下:
# –win-dir-chooser, 安装时添加 “选择安装路路径”
# –win-shortcut, 安装后自动在桌面添加快捷键
# –win-menu-group, 启动该应用程序所在的菜单组 (实测无效,但是必须有这条命令,没有–win-menu 会报 311 错误)
# -update 2021-2-18: –win-menu-group 应该放在–win-menu 之后,否则无效。
# –win-menu,添加到系统菜单中
# 示例:jpackage --name Non-modular-installer --input lib --main-class com.raven.App --main-jar Non-modular-packaging-demo.jar --vendor raven --win-dir-chooser --win-shortcut --win-menu --win-menu-group "Non-modular-packaging"

 

4.在便携包(步骤2或其他类型包的安装目录)的基础上直接使用类运行程序,不使用jar包
  4.1 打开"软件目录(或安装目录)/app"文件夹
技术图片
  4.2 使用文本编辑器打开"软件名.cfg"(例如:PlaneWar.cfg)文件并修改
修改前
 
[Application]
app.name=PlaneWar
app.version=1.0
app.runtime=$ROOTDIR\runtime
app.identifier=com.game
app.classpath=$ROOTDIR\app\.\plane-war-1.0-SNAPSHOT.jar;$ROOTDIR\app\plane-war-1.0-SNAPSHOT.jar
app.mainjar=$ROOTDIR\app\plane-war-1.0-SNAPSHOT.jar
app.mainclass=com.game.World

[JavaOptions]

[ArgOptions]

 

修改后:
删除了"app.mainjar"项
修改"app.classpath"为app文件所在路径(即cfg文件夹路径),其他保持不变
[Application]
app.name=PlaneWar
app.version=1.0
app.runtime=$ROOTDIR\runtime
app.identifier=com.game
app.classpath=$ROOTDIR\app
app.mainclass=com.game.World

[JavaOptions]

[ArgOptions]

 

5.直接使用windows的bat脚本或linux脚本运行java程序(自带运行环境)
5.1 将java代码相关资源放入app文件夹
技术图片
技术图片
5.2 生成jre运行环境(注意jdk版本需要和代码版本一致,否则可能会出错)
进入jdk根目录
输入(如果失败,尝试使用管理员身份启动powershell,再执行该命令)
bin\jlink.exe --module-path jmods --add-modules java.desktop --output jre
生成后的jre文件夹如图
技术图片
5.3 powershell手动执行命令验证是否成功
jre\bin\java --class-path "..\planewar\PlaneWar\app\.;..\planewar\PlaneWar\app\lib\*" com.game.GameLaunch

 说明:

# 成功表示可以运行
# jar路径windows使用";"分割,linux使用""
# "..\planewar\PlaneWar\app\."表示class文件的根目录
# "..\planewar\PlaneWar\app\lib\*"表示加载lib中所有的jar文件

 

5.4
创建一个新文件夹
将jre文件夹和app文件夹移入新文件夹中
技术图片
根据你的系统选择下列一种即可
Windows:
创建文本文件,重命名为run.bat,内容输入:
jre\bin\java --class-path "app\.;app\lib\*" com.game.GameLaunch

 Linux:

创建文本文件,重命名为run.sh,内容输入:
jre\bin\java --class-path "app\.:app\lib\*" com.game.GameLaunch

5.5 运行脚本,成功即完成。

 
参考:
https://blog.csdn.net/qq_38373149/article/details/115201261
https://blog.csdn.net/yiminghd2861/article/details/108286956
以及其他博客(写的时候没记录下网址)

使用jpackage将java程序打包成exe程序(不需要安装jdk即可运行)

标签:其他   说明   package   app   必须   版本   博客   网址   classpath   

原文地址:https://www.cnblogs.com/zeromi/p/14852323.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!