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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

KVM系统虚拟化性能测试过程总结

buildroot编译 为啥要用buildroot 支持很多&#xff1a;交叉编译工具链、根文件系统生成、内核映像编译和引导加载程序编译。使用简单&#xff1a;使用类似内核的menuconfig、gconfig和xconfig配置界面&#xff0c;使用buildroot构建基本系统很容易。支持很多的包&#xff1a…

1.10 Unity中的数据存储 XML

一、XML 1.介绍 XML是一个文档后缀名是*.xmlXML是一个特殊格式的文档XML是可扩展的标记性语言XML是Extentsible Markup Language的缩 写XML是由万维网联盟(W3C)创建的标记语言&#xff0c;用于定义编码人类和机器可以读取的文档的语法。它通过使用定义文档结构的标签以及如何…

基于ubuntu2204使用kubeadm部署k8s集群

部署k8s集群 基础环境配置安装container安装runc安装CNI插件部署1.24版本k8s集群&#xff08;flannel&#xff09;安装crictl使用kubeadm部署集群节点加入集群部署flannel网络配置dashboard 本集群基于ubuntu2204系统使用kubeadm工具部署1.24版本k8s&#xff0c;容器运行时使用…

AIGC视频生成:Pika1.0快速入门详解

Pika1.0快速入门详解 一、简介二、登录三、参数设置1、改变画面大小&#xff08;Aspect ratio&#xff09;2、改变帧数大小&#xff08;Frames per second&#xff09;3、镜头平移&#xff08;Camera control&#xff09;4、画面运动控制&#xff08;Strength of motion&#x…

[Linux进程(一)] 什么是进程?PCB的底层是什么?以及进程标识符pid与ppid

文章目录 1、前言2、描述进程 — PCB(os怎么管理进程呢)3、查看进程3.1 方法一3.2 方法二 4、系统调用获取进程标示符(PID)4.1 获取进程的ID4.2 获取进程的父进程ID 5、系统调用创建子进程-fork 1、前言 大家经常都在讲进程&#xff0c;而它到底是什么呢&#xff1f; 这里给大…

UE5 UE4 修复GPU驱动程序崩溃

原贴链接&#xff1a;https://mp.weixin.qq.com/s/e5l9XtfwEFWgwhHi1b2idg UE5 UE4在处理含有大量图形的项目时&#xff0c;你有可能会遇到GPU崩溃 可以通过修改注册表&#xff0c;修复崩溃。 GPU崩溃情况概述 UE5 UE4在处理含有大量图形的项目时&#xff0c;你有可能会遇到G…

二线厂商-线上测评-大数据开发

曾经投递过一些中级岗位&#xff0c;在面试之前&#xff0c;会通过邮件的方式把性格测试的题目发给你让你做一下。 一般分为单选题&#xff0c;多选题&#xff0c;性格测试题&#xff0c;认知理解题等等。 大概做了一个小时吧。 单选题&#xff1a; 感觉就是类似于以前高中时候…

AI芯片:神经网络研发加速器、神经网络压缩简化、通用芯片 CPU 加速、专用芯片 GPU 加速

AI芯片&#xff1a; 神经网络研发加速器、神经网络压缩简化、通用芯片 CPU 加速、专用芯片 GPU 加速 神经网络研发加速器神经网络编译器神经网络编译器 神经网络加速与压缩&#xff08;算法层面&#xff09;知识蒸馏低秩分解轻量化网络剪枝量化 通用芯片 CPU 加速x86 加速arm 加…

OceanBase原生分布式数据库

1.历史背景 在Java Web项目中&#xff0c;常常使用免费开源的MySQL数据库存储业务数据&#xff0c;按业界经验MySQL单库超过多大数据体量&#xff0c;或单表超过几百万条数据后就会出现查询变慢的情况&#xff0c;单实例数据库只能扩展物理资源(CPU、内存)&#xff0c;来提升查…

ASP.NET Core高级之认证与授权(二)--JWT认证前后端完整实现

阅读本文你的收获 了解JWT身份认证的流程了解基于JWT身份认证和Session身份认证的区别学习如何在ASP.NET Core WebAPI项目中封装JWT认证功能 在上文ASP.NET Core高级之认证与授权(一)–JWT入门-颁发、验证令牌中演示了JWT认证的一个入门案例&#xff0c;本文是一个基于JWT认证…

docker 安装redis (亲测有效)

目录 1 安装 1 安装 1 将redis 的 tar 包 上传到服务器 上传之后tar 包&#xff0c;将他变成镜像 输入docker images,发现目前是没有镜像的&#xff0c;现在将tar 包变成镜像 docker load -i redis.tar以上就将tar 包变成镜像了 现在在宿主机找一个地方&#xff0c;存放数据…

跟我学java|Stream流式编程——并行流

什么是并行流 并行流是 Java 8 Stream API 中的一个特性。它可以将一个流的操作在多个线程上并行执行&#xff0c;以提高处理大量数据时的性能。 在传统的顺序流中&#xff0c;所有的操作都是在单个线程上按照顺序执行的。而并行流则会将流的元素分成多个小块&#xff0c;并在多…

DHSP和DNS

一、服务程序 1.1DHCP定义 DHCP&#xff08;动态主机配置协议&#xff09;是一个局域网的网络协议。指的是由服务器控制一段IP地址范围&#xff0c;客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。默认情况下&#xff0c;DHCP作为Windows Server的一个服务组…

java基础之Java8新特性-方法引入

目录 1.简介 2.方法引入 方法引入遵循规范 方法引入种类 1.静态方法引入 2.对象方法引入 3.实例方法引入 4.构造函数引入 1.简介 方法引用是 Java 8 中引入的另一个重要特性&#xff0c;它提供了一种简洁的语法来直接引用现有方法或构造函数。方法引用可以看作是 Lambd…

复试 || 就业day14(2024.01.10)算法篇

文章目录 前言字符串中第二大的数字字符串中不同整数的数目判断句子是否为全字母句长度为三且各字符不同的子字符串检查是否区域内所有整数都被覆盖*重新分配字符使所有字符串都相等可以输入的最大单词数检查是否所有字符出现次数相同差的绝对值为 K 的数对数目至少在两个数组中…

设计模式之外观模式【结构型模式】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档> 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某…

数组计算模块NumPy

NumPy是Python数组计算、矩阵运算和科学计算的核心库。 提供了高性能的数组对象提供了大量的函数和方法NumPy使用机器学习中的操作变得简单NumPy是通过C语言实现的 NumPy的安装 pip install numpy 数组的分类 一维数组 跟Python列表的形状一样&#xff0c;区别在于数组的…

MongoDB—SQL到MongoDB映射图表

一、术语和概念 下表显示了各种 SQL 术语和概念 以及相应的 MongoDB 术语和概念。 SQL Terms/Concepts MongoDB Terms/Concepts database database table collection row document or BSON document column field index index table joins $lookup, embedded docu…

RV1126边缘计算AI盒子,支持4-6路1080p视频,2T 算力

1 产品概述 信迈推出基于瑞芯微Rockchip RV1126架构的AI边缘计算主板&#xff0c;RV1126芯片是四核ARM Cortex-A7,1.5GHz&#xff0c; RSIC-V 200MHz CPU &#xff0c;NPU2.0Tops。AI边缘计算主板外围接口丰富&#xff0c;拥有超强扩展性&#xff0c;可广泛应用在智慧安防、工…

贝锐蒲公英云智慧组网解读:实现工业设备远程调试、异地PLC互联

这个时候&#xff0c;使用异地组网是非常有效的解决方案。在12月28日贝锐官方的直播中&#xff0c;请到了贝锐蒲公英的技术研发经理&#xff0c;为大家分享了贝锐蒲公英云智慧组网解决方案&#xff0c;以及蒲公英二层组网相关的技术和应用。 搜索“贝锐”官方视频号&#xff0c…