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

news2024/11/20 20:44:00

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.coloradmin.cn/o/1370839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux信号处理浅析

一、信号从发送到被处理经历的过程 1、常见概念 (1) 信号阻塞 阻塞&#xff0c;即被进程拉黑&#xff0c;信号被发送后&#xff0c;分为两种情况&#xff0c;一种是被阻塞了&#xff08;被拉黑了&#xff09;&#xff0c;一种是没有被阻塞。 (2) 信号未决 在信号被进程处理…

xilinix 7系列器件生成已加密文件和已经过身份验证的文件

注释 &#xff1a;如需了解更多信息&#xff0c;请参阅《使用加密确保 7 系列 FPGA 比特流的安全》(XAPP1239)。 要生成加密比特流&#xff0c;请在 Vivado IDE 中打开已实现的设计。在主工具栏中&#xff0c;依次选择“Flow” → “Bitstream Settings”&#xff08;流程 >…

【elfboard linux开发板】11. 版本管理和修改设备树流程(点亮LED)

1. 版本管理 1.1 初始化git仓库 git init 生成一个.git 目录 git config --global user.name 用户名 git config --global user.email 邮箱 1.2 查看.gitignore vim .gitignore 1.3 添加删除到缓存区 git status 查看状态 git add 文件名 git rm 文件名 1.4 提交当前记录 …

.NET Framework 与 .NET Core 与 .NET Standard 之间的差异

介绍 在本文中&#xff0c;我们将探讨 .NET Framework、.NET Core 和 .NET Standard 之间的差异。 .NET Framework 与 .NET Core .NET框架.NET核心 历史 .NET Framework 是 .NET 的第一个实现。 .NET Core 是 .NET 的最新实现。 开源 .NET Framework 的某些组件是开源的。 .N…

在学习爬虫前的准备

1. 写一个爬虫程序需要分几步 获取网页内容。 我们会通过代码给一个网站服务器发送请求&#xff0c;它会返回给我们网页上的内容。 在我们平时使用浏览器访问服务器内容是&#xff0c;本质上也是向服务器发送一个请求&#xff0c;然后服务器返回网页上的内容。只不过浏览器还会…

Spark八:Spark性能优化

Spark性能调优 Spark调优的方法&#xff0c;包括RDD使用、文件读取&#xff0c;partition 学习资料&#xff1a;https://mp.weixin.qq.com/s/caCk3mM5iXy0FaXCLkDwYQ 一、Spark调优之RDD算子调优 1.1 RDD复用 在对RDD进行计算时&#xff0c;要避免相同的算子和计算逻辑下对…

高防服务器、高防 IP 和高防 CDN 之间有什么区别?

网络运营人员最头痛的是什么&#xff1f; 网络攻击无疑名列前茅。一旦企业遭受网络攻击&#xff0c;所面临的损失可能是无法估量的。那么&#xff0c;如何有效地抵御网络攻击呢&#xff1f; 高防 IP、高防 CDN 和高防服务器是当前主流的防御手段。那何为“高防”呢&#xff1…

unity小程序websocket:nginx配置https (wss)转http (ws)及其他问题解决

目录 前言 实际运用场景 处理流程如下 nginx配置ssl和wss 配置过程中遇到的问题 1、无法连接服务器 2、通过IP可以访问&#xff0c;域名却不行 问题描述 解决 3、如何判断该域名是否备案了 前言 为了服务器网络的通用性&#xff0c;我们在实现移动端的游戏转微信小程序…

植物大战僵尸小游戏抖音快手直播搭建弹幕插件教程

植物大战弹幕插件功能介绍 该插件由梦歌技术部团队支持开发&#xff0c;本插件软件通过监测抖音弹幕信息&#xff0c;获取礼物数据触发脚本插件对应的功能&#xff1b; 功能目前基本上已经完善&#xff0c;后期功能会陆续上线支持更新&#xff0c;全新的脚本监测稳定方便实用…

2024年1月9日学习总结

目录 学习目标学习内容联邦学习基础&#xff1a;why, what, howwhy&#xff1f;what&#xff1f;how&#xff1f; 联邦学习的例子——CIFAR-10数据集&#xff08;分类问题&#xff09;1、import libararies2、hyper-parameters3、加载并且划分数据4、创建神经网络模型5、helper…

易基因:ChIP-seq等揭示WWOX基因通过上调Myc促进骨肉瘤发生发展的表观调控机制|Cell Death Dis

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 骨肉瘤&#xff08;Osteosarcoma, OS&#xff09;是一种高侵袭性骨肿瘤&#xff0c;主要影响儿童和青少年。这种恶性肿瘤与不良临床结果相关&#xff0c;尤其是肺转移。由于其罕见性和生…

【7-zip密码】7-Zip如何取消文件加密的密码

7z压缩包设置了密码&#xff0c;解压的时候就需要输入正确的密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了7z压缩包的密码…

Ubuntu20二进制方式安装nginx

文章目录 1.下载nginx安装包2.安装nginx3.安装出现的问题及解决方案错误1&#xff1a;错误2&#xff1a;错误3&#xff1a; 4.常用命令5.知识扩展&#xff1a; 1.下载nginx安装包 nginx官网&#xff1a;http://nginx.org/en/download.html 选择稳定的nginx版本下载。 2.安装ngi…

SWM341系列之SWM34SRET6介绍

SWM341系列的介绍 本文介绍了华芯微特SWM341系列主要性能&#xff0c;和其系列之一的SWM34SRET6-50驱动4.3寸800*480 TFTLCD显示的例程应用。 SWM341系列性能 SWM341是一款基于ARM Cortex-M33的32位微控制器&#xff0c;片上包含精度为 1%以内的 20MHz/40MHz 时钟&#xff0c;最…

Java18:网络编程

一.对象序列化&#xff1a; 1.对象流&#xff1a; ObjectInputStream 和 ObjectOutputStream 2.作用&#xff1a; ObjectOutputSteam&#xff1a;内存中的对象-->存储中的文件&#xff0c;通过网络传输出去 ObjectInputStream:存储中的文件&#xff0c;通过网络传输出去…

状态管理小能手:Cookie 和 Session

1. 引言 大家好&#xff0c;我是小❤&#xff0c;一个漂泊江湖多年的 985 非科班程序员&#xff0c;曾混迹于国企、互联网大厂和创业公司的后台开发攻城狮。 假期抢票的尴尬事件 最近小❤在抢出行的高铁票时&#xff0c;发生了一件尴尬的事情。 这不是临近假期了嘛&#xf…

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

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

SSM 基础知识点

1. IoC IoC—Inversion of Control&#xff0c;即“控制反转”&#xff0c;不是什么技术&#xff0c;而是一种设计思想。在 Java 开发中&#xff0c;IoC 意味着将你设计好的对象交给容器控制&#xff0c;而不是传统的在你的对象内部直接控制。 谁控制谁&#xff0c;控制什么&…

Linux网络配置

一、查看网络配置 1、查看网络接口信息ifconfig 1.查看所有活动的网络接口信息 2.查看指定网络接口信息 ifconfig 网络接口 ifconfig -a #显示所有活动及非活动的连接 ifconfig网络接口 ifconfig -a #显示所有活动及非活动的连接 主机的网络接口卡(网卡)通常称为网络接口…