将jar可执行文件打包为windows安装包体

news/2024/10/6 3:21:19/文章来源:https://www.cnblogs.com/JhonKkk/p/18287164

当我们希望将java编写的可执行文件.jar打包为一个.exe供用户直接使用,我们需要将jre/jdk也打包到exe中,这样用户环境就不需要安装jdk,直接运行我们做好的exe文件。

整个过程分为两步,为了方便演示,这里使用JMonkeyEngine SDK打包一个jme3游戏的方式来解释。

工具

首先下载这里的工具:

链接:https://pan.baidu.com/s/1YYxKFaT-t0gOUFVVVI2-Lw
提取码:1wpc

解压后可以看到一个exe4j9的文件夹,将其放到你需要的目录中,然后进入exe4j4/bin目录,找到exe4j.exe,启动后填写如下内容:

 姓名和公司可以随便填,许可证密钥填:L-g782dn2d-1f1yqxx1rv1sqd,这样就可以破解,不破解的话,你打包的exe启动会有对话框。

然后安装百度云下载文件中的innosetup工具。

创建jar可执行文件

这里我制作了一个jme3游戏,如下:

 这里我使用的是jdk8进行编译(因为我需要同时编译出android包体,而jme3的核心库我使用的是jdk8进行编译生成的android.jar或以下版本):

 右键CleanAndBuild即可生成最新的jar可执行文件和对应的apk:

 进入对应目录,这里就可以看到编译出来的可执行文件jar和对应的未签名的apk文件,apk用java生成一个密钥进行签名就可以安装到android上使用了(这里我们不关心apk):

 启动后jar后(注意,不要使用loadModel(".xml")这种格式,解析xml的插件要求jdk11,编译后与运行环境jdk8存在代码兼容性问题,统一转换为j3o):

 一切正常后,进入下一步。

使用exe4j生成exe

打开exe4j,以此如下:

 Short name of your application为打包exe的名字,Output directory为生成exe所在目录:

 Icon可以不填(这是exe文件的显示图标),Executable name为启动exe后显示的名称:

这里可以填exe的一些展开信息(就是你鼠标浮动到.exe文件时会显示的详细信息):

 然后这里如果你捆绑的是64位jdk则选择64位,否则选择32位:

 接下来一步很重要,如下:

 点击+号,添加jar可执行文件:

 注意,到这里之后,还未结束,因为此时我们只添加了TestGame2.jar这个jar包:

 而Jme3游戏将其他依赖包放在了lib文件夹中:

 我们需要依此重复上面步骤,把lib文件夹中的.jar都添加进来,如下:

 然后选择Main class from,选择我们的启动类:

 下一步配置jdk最小最大版本:

 然后接下来点击这个:

 我们需要删除这三项默认的:

 如下:

 然后依次如下:

 写死固定名字为.\jre相对目录(因为我们需要把jdk/jre复制到exe同一目录中)。

然后Preferred VM选择Client HotSpot VM:

 然后你可以添加一个闪屏页面(即启动exe时的一个启动界面闪屏):

 你还可以添加一些对exe的描述:

 然后一路点下一步就行了,最后到这个页面后,建议点击Save As,将配置导出(下次对这个相同的jar进行反复打包exe就可以直接打开这个配置文件导入exe4j中了,不用重复配置所有步骤):

 这里保存了配置:

 导入方法就是:

 如下就是我们生成的exe,此时你启动exe会报错:

 因为我刚刚配置了exe读取相同目录下的jre目录下的vm作为运行环境,这一步很关键,通常jdk8安装后目录下会有一个jre:

 如果你是jdk8以及以下版本,可以直接复制这个jre到exe相同位置处,即可启动exe:

 如下:

 如果你是jdk11以及以后版本,安装后是不会有jre的,你通过命令行生成的jre也是有问题的,此时需要直接把整个jdk11复制到exe目录中,然后改名为jre即可

使用InnoSetup将exe和jre打包为安装包体

如果你只是使用exe4j生成exe,则你需要复制jre和exe给玩家,我们希望直接给玩家一个exe安装包,这个安装包安装后就包含了jre,此时我们需要InnoSetup,这个工具是用来生成一个exe安装包的,打开InnoSetup工具,新建一个脚本:

 依次填安装包相关信息:

 然后点下一步:

 然后选择我们的主程序(也就是exe4j生成的.exe):

 然后添加jre文件作为安装包的一部分,这里需要注意,我们希望安装后TestGame2.exe和jre文件夹在同一个目录中,但是如果我们直接添加jre文件夹,则会导致添加的是jre里面的文件以及文件夹,所以我们需要随便弄一个文件夹,把jre放到里面,如下:

 temp文件夹包含jre文件夹:

 然后添加temp文件夹:

 然后点下一步: 

 然后一直点下一步,到这个界面,可以添加一些安装时的许可描述(可以忽略,直接下一步):

 然后保持默认选项继续下一步:

 添加你需要的语言,继续下一步:

 然后选择exe安装包生成目录和图标相关信息:

 然后下一步保持默认选择点击下一步并点击完成生成脚本:

 这样就会生成脚本,生成脚本后默认会弹出是否立即编译脚本,编辑脚本的意思就是生成安装包体,点击否:

 你可以通过手动编辑脚本来修改刚刚GUI可视化配置过程中的一些选项,确定没问题后,点击这个按钮编译脚本:

 生成安装包后默认会进行安装,点击取消:

 查看安装包体,这就是我们生成的:

 你可以直接把这个安装包体发给玩家,玩家不需要安装任何jdk,直接点击安装exe就可以玩你制作的java游戏了。

优化

虽然最后生成的安装包体压缩成了66MB,但是其中jre占了很大空间,所以我们可以根据jre瘦身法把jre中不需要的东西手动删除进行瘦身,减少安装包exe的大小。

 

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

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

相关文章

FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt

​《FFmpeg开发实战:从零基础到短视频上线》一书的“10.2 FFmpeg推流和拉流”提到直播行业存在RTSP和RTMP两种常见的流媒体协议。除此以外,还有比较两种比较新的流媒体协议,分别是SRT和RIST。 其中SRT全称为Secure Reliable Transport,中文叫做安全可靠传输协议。RIST全称…

java学习进度

(1)通过视频学习了解了java基本概述 (2)成功下载了Eclipse,并搭建java环境 (3)使用Eclipse运行"hello world"程序 代码如下: package hello; public class helloworld { public static void main(String[] args) {// TODO Auto-generated method stubSystem.…

横截面交易策略:概念与示例

更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。 什么是横截面策略 横截面交易策略(Cross-Sectional Trading Strategy)是一种金融市场上的交易策略,它是基于不同资产之间的相对价值或其他因子的差异来进行投资决策。这种策略的核…

Spark快速大数据分析PDF下载读书分享推荐

《Spark 快速大数据分析》是一本为 Spark 初学者准备的书,它没有过多深入实现细节,而是更多关注上层用户的具体用法。不过,本书绝不仅仅限于 Spark 的用法,它对 Spark 的核心概念和基本原理也有较为全面的介绍,让读者能够知其然且知其所以然。 Spark快速大数据分析PDF下载…

IP核:XDMA学习

知识: XDMA效率没有RIFFA高,最高似乎只支持1288位宽; 输出的用户时钟是250MHZ; IP核配置: 参考: https://docs.amd.com/r/zh-CN/pg195-pcie-dma/ 具体:重要:PCIe:BARs标签页该标签页主要用于配置 BAR,所谓的使能和配置各接口 interface,其实质是配置不同的 BAR,首先介…

【模块三】Python高级

面向对象基础 类和对象 概念 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式。 类是人们抽象出来的一个概念,所有拥有相同属性和功能的事物称为一个类;而拥有相同属性和功能的具体事物则成为这个类的实例对象。 面向对象编程提供了一种从现实世界中抽象…

大气热力学(5)——绝热过程

本篇文章源自我在 2021 年暑假自学大气物理相关知识时手写的笔记,现转化为电子版本以作存档。相较于手写笔记,电子版的部分内容有补充和修改。笔记内容大部分为公式的推导过程。 目录5.1 气块的概念5.2 热力学第一定律的几种微分形式5.3 干绝热过程5.4 干绝热递减率(干绝热直…

如何解决服务器开机报警问题

解决服务器开机报警问题,需要按照一系列步骤进行故障排查和修复。 一、初步检查与确认 查看报警信息: 观察服务器的指示灯,特别是电源指示灯、硬盘指示灯等,看是否有异常。 如果服务器有显示屏或终端窗口,查看是否有相应的警告信息或错误代码。 确认电源状态: 检查电源线…

用友财务软件数据库恢复

是一个关键的操作,旨在解决数据库文件损坏或数据丢失的问题。 一、恢复方法使用软件内置的数据恢复工具 步骤: 打开用友财务软件,进入“工具”或“数据管理”等相关菜单。 找到“数据库恢复”或“数据恢复”选项,点击进入。 选择需要恢复的数据库文件和备份文件。这里需要确…

管家婆数据库数据恢复

一、确认数据丢失情况 首先,需要确认数据是否真的丢失,以及丢失的数据范围。有时候,数据可能只是暂时无法访问,或者由于软件故障导致的数据显示问题。 二、检查备份定期备份的重要性 管家婆软件通常会具备自动备份功能,用户应该确保该功能已经开启,并定期检查备份文件的完…

服务器进水主板维修

服务器进水主板的维修是一个复杂且需要专业技能的过程。 一、立即断电与初步处理 立即断电:一旦发现服务器进水,应立即切断电源,防止电流通过水分造成短路,进一步损坏主板和其他电子元件。 移除电池与外设:如果是笔记本电脑或可拆卸电池的服务器,迅速移除电池和所有外部连…

sqlserver数据库MDF文件修复

针对SQL Server数据库的MDF文件修复,这是一个相对复杂的过程,具体方法取决于文件的损坏程度、是否有备份以及数据库的状态。以下是一些常见的修复方法:使用备份恢复 这是最直接且最可靠的方法。如果你有数据库的备份,并且备份是在MDF文件损坏之前创建的,那么你可以通过还原…