jpackage是jdk14正式加入的一个用于独立打包的工具;
官网简介翻译:
jpackage工具将以Java应用程序和Java运行时映像作为输入,并生成一个包含所有必要依赖项的Java应用程序映像。它可以生成特定于平台格式的本机软件包,例如Windows上的exe或macOS上的dmg。每种格式都必须在其所在的平台上构建,没有跨平台支持。该工具将提供各种选项,允许以不同方式自定义打包的应用程序。
jdk17的官网:The jpackage Command (oracle.com)
还百度到一个中文的网站,应该不是新版本的:JPackage - Java中文网 (p2hp.com)
使用jpackage需要至少jdk14,还要装个WIX TOOLSET工具(没装的话使用jpackage会提示要安装并提供了个网址:WiX Toolset)
最终是跳到github上下载:Release WiX Toolset v3.11.2 · wixtoolset/wix3 · GitHub
安装wix311需要.net 3.5.1环境,还得在电脑上弄个.net 3.5环境(我的win10电脑):
打开“控制面板”,点击“程序”,点击“启用或关闭Windows功能”,打开的窗口里勾选“.NET Framework 3.5”,然后让windows下载安装即可;
安装完wix工具后就可以使用jpackage了;
先准备一个正常的jar包:
package test;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("Hello World");
try (Scanner scan = new Scanner(System.in)) {
scan.nextLine();
}
}
}
打包成可执行的jar包(为了防止运行时一闪而过就加了个Scanner读取输入后再退出);
我测试用的文件夹目录:E:\Temp\javatest\testJpackage,在里面新建了一个in文件夹,把生成的abc.jar包丢进去:
回到测试目录E:\Temp\javatest\testJpackage,shift+右键,在此处打开Powershell窗口;
执行:jpackage.exe --input .\in -t exe --description onlytest -n myapp --main-jar abc.jar --main-class test.Main --icon .\yahaha.ico --win-console --win-dir-chooser --win-shortcut --win-shortcut-prompt
过一会等执行完毕,就会在测试目录下生成一个exe的安装文件(PS:还提前做了一个ico图标放目录里了);
--input 设置jar包所在的路径;-t 指明打包类型是exe(--type简写);--description 写了个描述“onlytest”;-n 设置程序名字(--name的简写);--main-jar 指定jar包;--main-class 指定main方法;--icon 指定图标;--win-console 指定使用控制台启动器;--win-dir-chooser 在安装程序的时候可以选安装目录;--win-shortcut 创建桌面快捷方式;--win-shortcut-prompt 在安装程序的时候可以选择是否创建桌面快捷方式;
然后就可以双击exe进行安装了,进入安装向导:
下一步,选一个安装目录;
下一步,勾选是否创建桌面快捷方式;
下一步,开始安装,点击安装,弹窗并选“是”允许未知发布者的安装;
安装完成;
然后在桌面有个快捷方式了:
安装目录里也已经有安装完毕的程序了:
双击快捷方式就可以执行了:
在控制台里回车让scanner读取一下就可以结束程序;
注意:安装程序不能重复安装,需要先卸载后才能安装,同时桌面图标和安装目录都会卸载清空;
另外还有一个坑需要注意:--ipnut目录不要跟--temp临时目录(默认当前目录)在同一个目录层级或者包含temp目录,会造成目录无限循环,删除这种好几百好几千层的嵌套目录不太友好;
关于这个问题百度到一篇文章:java JPackage不生成可工作的exe和bugs文件夹 - Java中文网 (cnpython.com)
文章上的回答可能是机翻吧,咱也不知道: