jdk14——独立打包工具jpackage

news2024/11/28 21:56:31

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)

文章上的回答可能是机翻吧,咱也不知道:

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

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

相关文章

【UE】制作可拖动的UI

效果 步骤 1. 新建一个控件蓝图并打开 这里我在画布面板中加了一个垂直框,垂直框内包含一个按钮和一个图像控件 我设置图像控件占垂直框的2/3,按钮占1/3 添加按钮按压事件、松开事件 在控件蓝图的事件图表中添加如下节点,其中“Close”、“…

通达信三重滤网交易系统指标公式(含强力指数指标)

三重滤网交易系统由《以交易为生》的作者亚历山大埃尔德(Alexander Elder)发明的,1986年首次公开,后续又不断改进,增加或者改变了一些细节,但是使用多重时间周期和技术指标进行分析决策的原理没变。 一、强力指数指标 《以交易为…

Taro 项目怎么获取元素的高度和视口高度

最近做小程序,用的Taro,需要设置空状态居中显示,因为空状态出现的地方不一样,所以需要动态设置,那么就需要获取元素的高度来计算 文档翻了一遍也没有找到,原生js获取高度得到的是null,百度了下…

点云拟合平面原理和实现(Halcon)

最近学习了一下拟合平面的原理,看了这篇文章最小二乘拟合平面(C版) - 知乎 讲到了以下几种方法,我这里在halcon中对其一一实现。 一、算法原理 1,直接求解法 2.使用拉格朗日乘子法 3 SVD分解法 二、Halcon实现 1.各方法对比 在halcon中…

Python - 面向对象编程 - 类变量、实例变量/类属性、实例属性

什么是对象和类 什么是 Python 类、类对象、实例对象 类变量、实例变量/类属性、实例属性 前言 只是叫法不一样 实例属性 实例变量 类属性 类变量 个人认为叫属性更恰当 类属性和实例属性区别 类属性,所有实例对象共享该属性实例属性,属于某一…

win10系统如何设置虚拟回环

在日常生活中,人们(特别是IT行业者)通常需要在一台机上进行软件测试,而同一台计算上通常只能使用一个地址,而在需要同时使用两个地址进行测试的时候就显得捉襟见肘。此方法通过配置window10自带的环回适配器,达到上述目的。 win1…

如何用chatgpt写作论文 GPT写毕业论文的技巧

如何用chatgpt写作论文 GPT写论文的技巧 经常被问到为什么万事知天下小程序不能写论文。也不是不能写,只是GPT3.5的上下文只有4K,一般论文要写上万字,所以不可能你直接输入一个论文标题就直出结果的。 不过手工分一下步骤就可以了。先让写…

适用于中小企业的5种采购策略

与大企业不同,在采购管理方面,中小企业往往不得不在更有限的资源范围内运作,并且没有同等水平的经验丰富的采购专业人员或先进的采购技术。这会使优化采购流程并实现与大型企业相同水平的成本节约和风险管理变得更具挑战性。但是,…

docker idea直接部署到腾讯云镜像服务

首先创建一个Dockerfile 编写Dockerfile的信息 FROM java:8 MAINTAINER clarkshixxx.com RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai >/etc/timezone ENV ACTIVE"pre" ENV loggingpath"/zhibo/logs"…

【Flutter 工程】005-代码分离实践:flutter_hooks functional_widget

【Flutter 工程】005-代码分离实践:flutter_hooks & functional_widget 文章目录 【Flutter 工程】005-代码分离实践:flutter_hooks & functional_widget一、概述1、Flutter “嵌套地狱”2、代码分离实践 二、实践1、安装 flutter_hooks & f…

油猴脚本尝试

现在是这样的,我这边有个运维系统,里面有个日志,我们经常要复制,然后我们复制的时候需要打开内容,然后去选中复制。 类似于这种,我觉得这个时候,去选中复制就很麻烦,右边这里不是有…

ChatGPT四大基本使用场景分析

ChatGPT是一种基于深度神经网络的自然语言生成模型,它能够通过大量的数据训练和学习,以模拟人类的自然语言交互方式来理解和回答用户提出的问题。作为一种全新的人工智能技术,ChatGPT具有高度的灵活性和可扩展性,可以不断地优化、…

Redis BigKey问题

1.广告平台,海量数据查询固定前缀的key 不要使用keys , 使用 scan 命令 scan 0 match "user:" 10 2.Memory usage命令用过吗 memory usage key [semples count] :计算每个键值对的字节数 3.bigKey 问题,多大算bigKey,如何发现?如何处理?如…

【Linux】打开Linux大门,踏入Linux世界(环境搭建再加一群Linux基本指令就OK啦~)

🧑‍🎓个人主页:简 料 🏆所属专栏:Linux系统编程与网络编程 🏆个人社区:越努力越幸运社区 🏆简 介:简料简料,简单有料~在校大学生一枚&#x…

论文分享 | 视野约束下多机器人系统的最小持久图生成与编队控制

阿木推出的Prometheus项目校园赞助活动,再次迎来开发者参与! 北京理工大学自动化学院赵欣悦同学,在Prometheus开源仿真架构的基础上进行了二次开发,且使用P450进行了真机实验并发表了相关论文,其论文《视野约束下多机…

前端开发如何速成java,使用java开发网络接口

引言 我是干前端的,闲来没事,也想学学java,下面我会根据我学习java的经历来整理出java的速成之路。 学习路线 按照数字的顺序学下去就行了 1.学习java基础教程:主要听 class和集合这两部分吧,这两个部分非常重要&am…

ASEMI代理韩景元可控硅C106M参数,C106M封装,C106M尺寸

编辑-Z 韩景元可控硅C106M参数: 型号:C106M 断态重复峰值电压VDRM:600V 通态电流IT(RMS):4A 通态浪涌电流ITSM:30A 平均栅极功耗PG(AV):0.2W 峰值门功率耗散PGM:1W 工作接点温度Tj&…

【LeetCode】《LeetCode 101》第九章:巧解数学问题

文章目录 9.1 公倍数与公因数9.2 质数204.计数质数(中等) 9.3 数字处理504. 七进制数(简单)172. 阶乘后的零(中等)415. 字符串相加(简单)326. 3 的幂(简单) 9…

mysql语句最大执行时间问题解决,无需改mysql配置

下面是我排错的一个过程: 1、我是ado.net执行一个查询语句报了个错: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. 译:超时已过期。操作完成前经过的超时时间&a…

【Netty】 工作原理详解(十一)

文章目录 前言一、Netty 模型二、代码示例2.1、引入Maven依赖2.2、服务端的管道处理器2.3、服务端主程序2.4、客户端管道处理器2.5、客户端主程序2.6、测试运行 总结 前言 回顾Netty系列文章: Netty 概述(一)Netty 架构设计(二&…