java -- jar打包成exe -- 携带jre环境

java的项目一般都是以jar发布,很少打包为可执行程序,因此常见的打包方式也不多,且即使打包之后也需要jre环境才能运行,大部分打包都不会携带jre,需要手动添加jre。这里介绍几种我用过的打包方案。

exe4j(不推荐)
jpackage
go加密打包再套壳
exe4j打包
exe4j打包最为简单,网上教程很多,这里不做多的赘述,虽然打包简单,但是缺点也很明显。

打包时虽然指定了jre路径,但是打包之后不会自动携带jre,也就是打包之后还要将对应的jre和exe一起发给么有jre环境的电脑才能使用。
exej4打包后每次运行都会将jar作为临时文件,且结束运行后不会自动删除临时文件,导致产生很多临时文件。
jpackage
jpackag是java自己的打包方式,缺点是需要java9及以上才能用。这里简单介绍一下如果打包,以springboot生成的jar为例。

pom文件引入maven打包工具

<build><finalName>drawing</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

 

 点击package之后生成可执行的jar,确保是能正常运行的jar之后即可执行打包命名

jpackage -i test -n excel快速出图工具 --type "msi" --win-dir-chooser --win-menu --win-shortcut --win-console --main-jar xdrawing.jar


命名说明
-i:需要打包的文件夹,如jar所在的目录,例子中取得是test文件夹。
-n:打包后的文件名
-type:类型,这里取得是msi文件
-main-jar:需要打包的jar
其他的几个参数是打包windows时的特性,打包其他平台时用其他平台的特性即可。
这里只是做简单的例子,具体如参数参考The jpackage Command (oracle.com)

jpackage打包的执行文件包含了一个精简版的jre,直接将可执行程序发给没有jre环境的电脑也可用。
目前笔者还不知道jpackage打包的jar能否加密,因此如果希望jar是被加密后再打包的话,这面推荐一种方式。go加密打包再套上壳。
go加密打包再套壳
jar很容易被反编译,jar的加密大致分为两种模式,有机会后续介绍,这里说一种对称加密的方式——xjar(XJar: XJar — Spring-Boot JAR 包加密运行工具,避免源码泄露以及反编译 (gitee.com))。

新建一个maven项目。加入对应的依赖。

 <!-- 设置 jitpack.io 仓库 --><repositories><repository><id>jitpack.io</id><url>https://jitpack.io</url></repository></repositories><!-- 添加 XJar 依赖 --><dependencies><dependency><groupId>com.github.core-lib</groupId><artifactId>xjar</artifactId><version>4.0.2</version><!-- <scope>test</scope> --></dependency></dependencies>

写个测试main函数开始加密。这里直接取得官网的例子,可取上面的官网看各个参数意思。

public class Test {public static void main(String[] args) throws Exception {XCryptos.encryption().from("H:\\绘图\\test\\drawing.jar").use("io.xjar").include("/io/xjar/**/*.class").include("/mapper/**/*Mapper.xml").exclude("/static/**/*").exclude("/conf/*").to("H:\\绘图\\test\\xdrawing.jar");}
}

执行后只要会生成一个加密后的jar xdrawing.jar  (该jar 是需要密匙才能反编译)和xjar.go文件(xjare.exe文件为后续编译文件,jre文件是为后续步骤准备的文件)

 

在有go环境的电脑上在当前路径执行如下命令,就会生成xjar.exe文件。

go build xjar.go

 在当前窗口执行如下命令即可启动jar

xjar.exe java -jar xdrawing.jar

 笔者这里为了方便后续加壳,复制了一个jre环境,因此运行的命令如下

xjar.exe .\jre\bin\java -jar xdrawing.jar

启动后如下

 

 此时jar是加密的,需要借助go编译的exe文件才能启动,且还是需要jre环境才能运行。但是对xjar.exe再套上一个壳的话,将jre环境包括进来,即可实现一个安装文件包含jre。

原来的go.exe 需要加上参数才能启动jar,这面我们对go文件做一下简单的更改,实现自动携带参数。原文件是从路径中取的值。

这里我们做一下简单的调整,将几个输入值写为固定值即可

 

 重新编译之后直接双击xjar.exe即可启动对应的jar文件。

利用inno setup加壳
下载地址Inno Setup (jrsoftware.org)

使用教程网上有很多,这里截一张主要的图,将包含jre和的路径添加进去即可。

 

 加壳之后生成对应的文件

 

双击安装之后 即可运行。打开安装目录之后发现包含了我们的jre环境

感谢大家的阅读,觉得有所帮助的朋友点点关注点点赞! 

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

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

相关文章

关于已配好java环境但双击无法打开jar包的解决方案

如果你已经装好了 java 环境直接跳到最后看解决方法即可 先说一下你安装的 java 环境&#xff0c;如果完全是默认选项安装&#xff0c;则会安装 jdk 和 jre&#xff0c;并且在安装 jre 时还需要安装目录下为空&#xff0c;其实 jre 的安装是多余的&#xff0c;因为安装的 jdk 里…

Teamcenter 查询包含Assembly的ItemRevision

问题描述 需要得到所有包含Assembly的ItemRevision。 TC OOTB的查询方式没有可用的&#xff0c;需要在Query Builder中进行自定义。 进一步分析&#xff0c;如果ItemRevision包含Assembly&#xff0c;其必定包含BOMViewRevision。 解决方案 自定义如下查下。 注意&#xff1…

vue 微信公众号定时发送模版消息

目录 第一步&#xff1a;公众号设置 网页授权第二步&#xff1a;引导用户去授权页面并获取code第三步&#xff1a;通过code换取网页授权access_token&openid第四步&#xff1a;后端处理绑定用户和发送消息 相关文档链接&#xff1a; 1、微信开发文档 2、订阅号/服务号/企业…

英语四级翻译练习笔记③——大学英语四级考试2023年12月真题(第三套)

目录 引言&#xff08;必看&#xff09; 四级翻译评分标准分析及真题解析 四级翻译评分标准 四级翻译真题 学生作答 1. 评分 2. 修正翻译中的错误 错误标记&#xff1a; 3. 改正句子 4. 标出错误单词 5. 标准答案 6. 常考万能句子 7.重点单词的中文意思 引言&…

远程抄表及预付费管理系统:智能管理的新篇章

1.系统简述 远程抄表及预付费管理系统是现代能源管理方面的一项重要自主创新&#xff0c;它将传统手动式抄水表方式转变为自动化技术、智能化管理模式&#xff0c;大大提高了高效率并减少了经营成本。该系统搭载了前沿的通讯技术、数据分析技术和财务管理系统核心理念&#xf…

RedHat9 | DNS剖析-配置转发DNS服务器

一、实验环境 1、转发DNS服务器 转发服务器&#xff08;Forwarding Server&#xff09;接受查询请求&#xff0c;但不直接提供DNS解析&#xff0c;而是将所有查询请求发送到另外一台DNS服务器&#xff0c;查询到结果后保存在本地缓存中。如果没有指定转发服务器&#xff0c;D…

性能测试(一)—— 性能测试理论+jmeter的使用

1.性能测试介绍 定义&#xff1a;软件的性能是软件的一种非功能特性&#xff0c;它关注的不是软件是否能够完成特定的功能&#xff0c;而是在完成该功能时展示出来的及时性。 由定义可知性能关注的是软件的非功能特性&#xff0c;所以一般来说性能测试介入的时机是在功能测试完…

Python | Leetcode Python题解之第103题二叉树的锯齿形层序遍历

题目&#xff1a; 题解&#xff1a; class Solution:def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if not root: return []res, deque [], collections.deque()deque.append(root)while deque:tmp []# 打印奇数层for _ in range(len(deque)…

春秋云境CVE-2020-26048

简介 CuppaCMS是一套内容管理系统&#xff08;CMS&#xff09;。 CuppaCMS 2019-11-12之前版本存在安全漏洞&#xff0c;攻击者可利用该漏洞在图像扩展内上传恶意文件&#xff0c;通过使用文件管理器提供的重命名函数的自定义请求&#xff0c;可以将图像扩展修改为PHP&#xf…

SpringBoot之@AutoConfigureBefore、@AutoConfigureAfter、@AutoConfigureOrder注解

前言 SpringBoot通过AutoConfigureOrder、AutoConfigureBefore、AutoConfigureAfter注解&#xff0c;控制自动配置类的实例化顺序。 Spring中控制Bean的实例化顺序 Spring中默认实例化顺序 创建实体类A、B、C Component public class A {public A() {System.out.println(&…

编程中的模块迷宫:区分与正确使用

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、模块混淆的陷阱 二、碳模块与探母模块的区别 三、如何正确使用模块 四、代码示例 五…

CR渲染噪点严重怎么办?常见噪点来源+排查方法

使用Corona渲染器进行渲染时&#xff0c;画面出现噪点是常见现象&#xff0c;尤其是在渲染初期。轻微的高频噪点通常是正常的&#xff0c;但如果经过多次渲染或长时间渲染后噪点依然明显&#xff0c;就可能意味着渲染设置或场景本身存在问题。虽然我们可以利用降噪功能模糊噪点…

NameSilo + Cloudflare 给网站加个域名(附 NameSilo 购买域名优惠码)

网站做好了之后,下一步就是买域名 在国内买域名的话,还需要备案,个人名下备案好像是还有限制,我就去 NameSilo 上面买的 在买之前,对比过几家 比如: godaddy/namecheap/cloudflare 本来是倾向于在 godaddy 上面买的,因为它支持支付宝支付,但是在详细看的时候,发现如果购买一年…

文心一言 VS 讯飞星火 VS chatgpt (269)-- 算法导论20.2 4题

四、修改 proto-vEB 结构&#xff0c;以支持重复关键字。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在原始的 van Emde Boas 树&#xff08;vEB tree&#xff09;结构中&#xff0c;关键字&#xff08;key&#xff09;是唯一的&#xff0c;不允许有重复的关…

DL/ML/RL/TL/FL机器学习框架总结

前言 本文总结了DL/深度学习、ML/机器学习、DML/分布式机器学习、AutoML/自动化机器学习、RL/强化学习、MLaaS/机器学习及服务、SR/语音识别领域的机器学习框架&#xff0c;可作为学习、研究、研发的参考资料。 1.DL/深度学习框架 PyTorch PyTorch是一个开源的Python机器学…

git的使用之筛选文件上传到远程服务器仓库

.gitignore 让本地文件有选择上传到远程服务器仓库 下面是linux内核的.gitignore # # NOTE! Dont add files that are generated in specific # subdirectories here. Add them in the ".gitignore" file # in that subdirectory instead. # # NOTE! Please use gi…

Xinstall:开启携带参数注册新时代,提升用户体验与运营效率

在移动互联网时代&#xff0c;App推广和运营面临着诸多挑战。其中&#xff0c;如何精准追踪用户来源、评估推广效果以及优化用户体验&#xff0c;一直是开发者们关注的焦点。而Xinstall作为一家一站式App全渠道统计服务商&#xff0c;通过其独特的携带参数注册功能&#xff0c;…

C语言布尔类型的前世今生

起初&#xff0c;C语言并没有布尔类型&#xff0c;都是使用int类型的变量来表示布尔值&#xff08;时至今日大家也基本都这样弄&#xff09;。_Bool是C99标准&#xff08;1999年的标准&#xff09;新增的数据类型&#xff0c;用于表示布尔值&#xff08;即逻辑值true和false&am…

solidworks 3D草图案例2-方块异形切

单位mm 单位mm 长方体 底面是48mm*48mm&#xff0c;高为60mm 3D草图 点击线&#xff0c;根据三视图&#xff0c;绘制角度线&#xff0c; 由于三点确定一个面&#xff0c;因此确定三点就可以了 基准面 点击参考几何体-基准面&#xff0c;依次点击3个点 曲面切除 完成后点击插…

POLARDB:新零售用户MySQL上云最佳选择

什么是云数据库POLARDB&#xff1f; POLARDB是阿里云自主研发的最新一代RDS关系型数据库&#xff0c;是特别针对互联网场景设计的Cloud-Native 云原生数据库。POLARDB for MySQL版本&#xff0c;在提供100%兼容MySQL5.6/8.0的关系型事务处理ACID特性之上&#xff0c;能够提供完…