JPackage指令将可执行Jar包打包成EXE运行程序

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应用主jarspring-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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/336176.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Yolov5双目测距-双目相机计数及测距教程(含代码)

Yolov5双目测距是一种基于深度学习模型的双目相机计数及测距方法&#xff0c;它可以用于在不同场景下进行物体检测、识别和测距。 以下是 Yolov5双目测距的主要特点和步骤&#xff1a; 1. 双目相机&#xff1a; Yolov5双目测距需要使用一对双目相机来获取场景中的图像数据。…

【排序算法】一、排序概念和直接插入排序(C/C++)

「前言」文章内容是排序算法之直接插入排序的讲解。&#xff08;所有文章已经分类好&#xff0c;放心食用&#xff09; 「归属专栏」排序算法 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、排序概念的介绍二、直接插入排序2.1 原理2.2 代码实现&#xff08;C/C&#xf…

VM虚拟机的ip突然不见了——吐血解决分享,同秃然的

问题&#xff1a;再虚拟机上不管是输入 ip a,还是ifconfig&#xff0c;还是ip addr,还是root都是一个效果&#xff0c;只有主机的IP&#xff0c;虚拟机的IP不见了 网上好多方法是改ens33文件的&#xff0c;可是我的打开之后是空白的&#xff0c;根本就没有东西&#xff0c;和我…

【小工具】pixi-live2d-display,直接可用的live2d的交互网页/桌面应用

效果&#xff1a; <script src"https://cubism.live2d.com/sdk-web/cubismcore/live2dcubismcore.min.js"></script> <script src"https://cdn.jsdelivr.net/gh/dylanNew/live2d/webgl/Live2D/lib/live2d.min.js"></script> <…

【数字图像处理】水平翻转、垂直翻转

图像翻转是常见的数字图像处理方式&#xff0c;分为水平翻转和垂直翻转。本文主要介绍 FPGA 实现图像翻转的基本思路&#xff0c;以及使用紫光同创 PGL22G 开发板实现数字图像水平翻转、垂直翻转的过程。 目录 1 水平翻转与垂直翻转 2 FPGA 布署与实现 2.1 功能与指标定义 …

Flink构造宽表实时入库案例介绍

1. 安装包准备 Flink 1.15.4 安装包 Flink cdc的mysql连接器 Flink sql的sdb连接器 MySQL驱动 SDB驱动 Flink jdbc的mysql连接器 2. 入库流程图 3. Flink安装部署 上传Flink压缩包到服务器&#xff0c;并解压 tar -zxvf flink-1.14.5-bin-scala_2.11.tgz -C /opt/ 复…

基于python热门旅游景点推荐系统+爬虫技术

大数据分析&#xff0c;数据可视化等皆可用。 源码分享。

esp32UART串口外设(Arduino)

通用异步接收器/发送器 &#xff08;UART&#xff09; 介绍 通用异步接收器/发送器 &#xff08;UART&#xff09; 是一种硬件功能&#xff0c;它使用广泛采用的异步串行通信接口&#xff08;如 RS232、RS422 和 RS485&#xff09;处理通信&#xff08;即时序要求和数据成帧&…

Underactuated Robotics - 欠驱动机器人学(二)- 简单摆杆

系列文章目录 前言 一、导言 本章的目标并不高&#xff0c;我们只想了解钟摆的动力学原理。 为什么是摆呢&#xff1f;部分原因是&#xff0c;我们大多数多连杆机器人操纵器的动力学都是大量耦合摆的动力学。此外&#xff0c;单摆的动力学原理非常丰富&#xff0c;足以引入我…

JVM主要的几种垃圾回收算法

1、Java 为什么要实现自动内存管理 &#xff1f; 简化开发过程&#xff1a;通过内存自动管理可以避免手动分配和释放内存的麻烦&#xff0c;减少了内存泄漏和内存错误的风险&#xff0c;让研发能更专注于业务逻辑&#xff0c;不必纠结于内存管理的细节。 提高开发效率&#xff…

【Python程序开发系列】一文总结API的基本概念、功能分类、认证方式、使用方法和开发流程

这是Python程序开发系列原创文章&#xff0c;我的第195篇原创文章。 一、什么是API&#xff1f; API是软件开发中非常重要的概念&#xff0c;它简化了不同组件之间的交互和集成&#xff0c;提供了对其他软件或服务功能的访问和调用方式。 API是应用程序编程接口&#xff08;Ap…

“To-Do Master“ GPTs:重塑任务管理的趣味与效率

有 GPTs 访问权限的可以点击链接进行体验&#xff1a;https://chat.openai.com/g/g-IhGsoyIkP-to-do-master 部署私人的 To-Do Master 教程&#xff1a;https://github.com/Reborn14/To-Do-Master/tree/main 引言 在忙碌的日常生活中&#xff0c;有效地管理日常任务对于提高生…