jpackage是jdk14正式加入的一个用于独立打包的工具。
官网简介翻译:
jpackage工具将以Java应用程序和Java运行时映像作为输入,并生成一个包含所有必要依赖项的Java应用程序映像。它可以生成特定于平台格式的本机软件包,例如Windows上的exe或macOS上的dmg。每种格式都必须在其所在的平台上构建,没有跨平台支持。该工具将提供各种选项,允许以不同方式自定义打包的应用程序。
一、前期准备
1、使用"mvn package"打包成jar
在项目下生成target目录,且包含打包成的jar(例如:demo-1.0.jar),确认这个jar能使用"java -jar ***.jar"运行
2、下载安装JDK
JPackage指令是JAVA 14新增的,所以安装的JAVA版本必须14+,我是用的是 jdk-17_windows-x64_bin.zip
二、运行过程
1、进入jdk17的bin目录下
2、打开命令行(CMD/Powershell)
3、使用jpackage打包成文件
生成运行程序app-image:
.\jpackage --type app-image --name import --input E:\ideaProject\import\target --main-jar storeEvaluation-1.0.0.jar --java-options "-Dserver.port=8888 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" --win-console --dest E:\dist
生成运行程序exe:
.\jpackage --type exe --name storeEvaluation --input E:\ideaProject\import\target --main-jar storeEvaluation-1.0.0.jar --java-options "-Dserver.port=8888 -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" --win-console --win-dir-chooser --win-shortcut --win-shortcut-prompt --dest E:\dist
生成安装程序msi(需要提前安装WIX工具):
.\jpackage --type msi --win-dir-chooser --name storeEvaluation --app-image E:\dist --dest E:\distmsi
使用Jpackage指令但未安装WiX时的提示:
[18:01:09.359] 找不到 WiX 工具 (light.exe, candle.exe)
[18:01:09.359] 从 https://wixtoolset.org 下载 WiX 3.0 或更高版本,然后将其添加到 PATH。
错误:类型 [msi] 无效或不受支持
三、WiX.exe安装及安装
1、WIX.exe下载
官网:WiX Toolset
点击Get Started 跳转至 Get started with WiX | WiX Toolset
点击 WIX v3 跳转至 WiX v3 | WiX Toolset
点击 Download WiX v3.11.2 跳转至 Release WiX Toolset v3.11.2 · wixtoolset/wix3 (github.com)
点击 wix311.exe 下载。
2、WIX.exe安装
安装wix311需要.net 3.5.1环境,还得在电脑上弄个.net 3.5环境(我的win10电脑):
打开“控制面板”,点击“程序”,点击“启用或关闭Windows功能”,打开的窗口里勾选“.NET Framework 3.5”,然后让windows下载安装即可;
安装完wix工具后就可以使用jpackage了。
四、JPackage 指令含义
jpackage参数解释
参数 | 作用 | 示例 | 说明 |
---|---|---|---|
--type | 打包类型 | app-image | 可选:"app-image", "exe", "msi",这里使用app-image,选择另外两个选项需要安装WiX |
--name | 应用名称 | spring | 打包后的名称,如"sping.exe" |
--input | 输入目录 | target | 该目录所有文件打包到应用目录中 |
--main-jar | 应用主jar | spring-1.0.jar | --input目录里的jar程序 |
-icon | 指定图标 | -icon | 指定图标 |
--win-console | 运行时启动控制台 | --win-console | 打开应用程序时,打开控制台。如果不启用在后台运行,关闭只能从任务管理器中结束任务 |
--win-dir-chooser | 在安装程序的时候可以选安装目录 | --win-dir-chooser | 在安装程序的时候可以选安装目录 |
--win-shortcut | 创建桌面快捷方式 | --win-shortcut | 创建桌面快捷方式 |
--win-shortcut-prompt | 在安装程序的时候可以选择是否创建桌面快捷方式 | --win-shortcut-prompt | 在安装程序的时候可以选择是否创建桌面快捷方式 |
--dest | 输出目录 | dist | 输出到该目录,不要和--input同个目录,否则会无限循环复制目录 |
查看帮助:jpackage -h (以下内容出于Windows平台下Java17版本。用有道词典和自己的一点理解翻译的,可能不准,仅作参考)
用法: jpackage <options>
简单示例:
--------------
生成适合主机系统的应用程序包:
对于模块化应用程序:
jpackage -n name -p modulePath -m moduleName/className
对于非模块化应用程序:
jpackage -i inputDir -n name --main-class className --main-jar myJar.jar
来自预构建的应用程序映像:
jpackage -n name --app-image appImageDir
生成预构建的应用程序映像:
对于模块化应用程序:
jpackage --type app-image -n name -p modulePath -m moduleName/className
对于非模块化应用程序:
jpackage --type app-image -i inputDir -n name --main-class className --main-jar myJar.jar
要为jlink提供自己的选项,请单独运行jlink:
jlink --output appRuntimeImage -p modulePath --add-modules moduleName --no-header-files [<additional jlink options>...]
jpackage --type app-image -n name -m moduleName/className --runtime-image appRuntimeImage
生成Java运行时包:
jpackage -n name --runtime-image <runtime-image>
通用选项:
@<filename>
从文件中读取选项和(或)模式;
此选项可多次使用.
--type -t <type>
要创建的包的类型;
有效值为: {"app-image", "exe", "msi"};
如果未指定此选项,将创建一个依赖于平台的默认类型.
--app-version <version>
应用程序和(或)包的版本
--copyright <copyright string>
应用程序的版权
--description <description string>
应用描述
--help -h
将包含当前平台每个有效选项的列表和描述的使用文本打印到输出流中,然后退出.
--icon <file path>
应用程序包图标的路径(绝对路径或相对于当前目录).
--name -n <name>
应用程序和(或)包的名称
--dest -d <destination path>
生成的输出文件所在的路径(绝对路径或相对于当前目录);
默认为当前工作目录.
--temp <directory path>
用于创建临时文件的新目录或空目录的路径(绝对路径或相对于当前目录);
如果指定,临时目录将不会在任务完成时删除,必须手动删除;
如果没有指定,将在任务完成时创建并删除一个临时目录.
--vendor <vendor string>
应用程序的供应商.
--verbose
启用详细输出
--version
将产品版本打印到输出流并退出.
用于创建运行时映像的选项:
--add-modules <module name>[,<module name>...]
要添加的模块列表,以英文逗号(",")分隔
这个模块列表连同主模块(如果指定)将作为--add-module参数传递给jlink.
如果没有指定,则只使用主模块(如果指定了--module),或者使用默认的模块集(如果指定了--main-jar).
此选项可多次使用.
--module-path -p <module path>...
一个英文分号(";")分隔的路径列表
每个路径必须是模块的目录,或者是模块jar文件的路径(每个路径都是绝对或相对于当前目录).
此选项可多次使用.
--jlink-options <jlink options>
一个以空格分隔的传递给jlink的选项列表
If not specified, defaults to "--strip-native-commands --strip-debug --no-man-pages --no-header-files".
此选项可多次使用.
--runtime-image <directory path>
将复制到应用程序映像中的预定义运行时映像的路径(绝对路径或相对于当前目录)
如果没有指定--runtime-image,jpackage将运行jlink来使用选项创建运行时映像:--strip-debug、--no-header-files、--no-man-pages和--strip-native-commands.
用于创建应用程序映像的选项:
--input -i <directory path>
包含要打包的jar文件的输入目录的路径(绝对路径或相对于当前目录)
输入目录中的所有文件都将打包到应用程序映像中.
用于创建应用程序启动器的选项:
--add-launcher <launcher name>=<file path>
启动器的名称,以及包含键、值对列表的Properties文件的路径(绝对路径或相对于当前目录)
可用的键:“module”、“main-jar”、“main-class”、“arguments”、“java-options”、“app-version”、“icon”和“win-console”.
这些选项被添加到或用于覆盖原始命令行选项,以构建额外的替代启动程序.
主应用程序启动器将从命令行选项构建。使用这个选项可以建造额外的替代启动器,并且这个选项可以多次使用来建造多个额外的启动器.
--arguments <main class arguments>
如果没有给启动程序提供命令行参数,则要传递给主类的命令行参数
此选项可多次使用.
--java-options <java options>
要传递给Java运行时的选项
此选项可多次使用.
--main-class <class name>
要执行的应用程序主类的限定名称。
这个选项只能在指定--main-jar时使用.
--main-jar <main jar file>
应用程序的主JAR;
包含主类(指定为相对于输入路径的路径);
--module或--main-jar选项可以指定,但不能同时指定.
--module -m <module name>[/<main class>]
应用程序的主模块(可选的主类);
此模块必须位于模块路径上;
指定此选项时,将在Java运行时映像中链接主模块。--module或--main-jar选项可以指定,但不能同时指定.
用来创建应用程序启动程序的与平台相关的选项:
--win-console
为应用程序创建控制台启动程序,应当为
需要控制台交互的应用程序指定
用于创建应用程序包的选项:
--about-url <url>
应用程序主页的URL
--app-image <directory path>
用于构建可安装包的预定义应用程序映像的位置(绝对路径或相对于当前目录)。
--file-associations <file path>
包含键值对的列表的属性文件的路径(绝对路径或相对于当前目录)
“extension”、“mime-type”、“icon”和“description”可用于描述该关联。
此选项可多次使用。.
--install-dir <directory path>
默认安装位置下面的相对子路径
--license-file <file path>
license文件的路径(绝对路径或相对于当前目录)
--resource-dir <directory path>
覆盖jpackage资源的路径.
通过向这个目录添加替换资源,可以覆盖jpackage的图标、模板文件和其他资源(绝对路径或相对于当前目录).
--runtime-image <directory path>
要安装的预定义运行时映像的路径(绝对路径或相对于当前目录)
本选项在创建运行时包时是必需的!
Platform dependent options for creating the application package:
--win-dir-chooser
添加一个对话框,使用户能够选择产品的安装位置.
--win-help-url <url>
用户获取进一步信息或技术支持的网址.
--win-menu
请求为此应用程序添加开始菜单快捷方式
--win-menu-group <menu group name>
应用程序所在的开始菜单组
--win-per-user-install
请求在每个用户的基础上执行安装
--win-shortcut
请求为此应用程序添加桌面快捷方式
--win-shortcut-prompt
添加一个对话框,允许用户选择安装程序是否创建快捷方式.
--win-update-url <url>
可用的应用程序更新信息的URL
--win-upgrade-uuid <id string>
与此包的升级相关联的UUID