java打包exe方案(自动携带jre)

article/2025/8/14 5:02:21

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://chatgpt.dhexx.cn/article/xSR6HqAY.shtml

相关文章

java项目打包方式

普通项目打包 项目内容很简单&#xff0c;只是引用了一个三方包。 打包步骤 File-Project Structure... 点击确定后选择Build - Build Artifacts.. 选择build即可&#xff0c;可以查看编译日志 maven项目打包 若果是普通项目就先转为maven项目。 右键项目选择第二项add frame…

Java打包技术(package)

1.什么是包&#xff08;package&#xff09;&#xff1f; 给一些相似的类组成一个文件夹&#xff0c;就叫做打包。 如果一个相同的类在一个不同的包&#xff08;package&#xff09;就不会发生冲突。 比如包&#xff08;package&#xff09;a中有一个类dog.java&#xff0c;…

怎么把java程序打包?java源代码打包方法

Java 源代码编译后需要打包&#xff0c;可是新手学习java人员来说&#xff0c;将java程序打包还是比较难的&#xff0c;那么接下来&#xff0c;我就来给大家讲解一下java程序打包的方法&#xff0c;不会的小伙伴可以跟着以下方法操作。 怎么把java程序打包&#xff1f; 1.手动…

将java或javaweb项目打包为jar包或war包

一、为什么打包 关于此问题&#xff0c;网上众说纷纭。结合个人理解以及网上说法&#xff0c;打成jar包是为了方便别人使用。 如果是运行java程序&#xff0c;就不需要在寻找包含main方法的类去执行&#xff1b;如果是使用第三方jar包&#xff0c;直接在自己项目中导入…

java秒杀项目总结

java秒杀项目总结 本项目专攻秒杀模块&#xff0c;共分为七个章节 第一章 项目框架搭建 1.Spring Boot环境搭建 2.集成Thymeleaf , Result结果封装 前期前后端并未分离&#xff0c;使用Thymeleaf来获取后台传来的数据Result结果封装可以让代码更规范&#xff0c;成功的时候…

Java飞机大战项目

飞机大战游戏是一款十分有趣的射击类小游戏,流畅的画面,高难度的挑战。游戏中,玩家驾驶英雄机,在空中进行战斗。点击并移动自己的英雄机,发射炮弹,打掉敌飞机以及蜜蜂,来获得分数和奖励,打掉一架敌飞机赢得5分,打掉一只蜜蜂赢得1条命或是获得20次双倍火力,如果撞上敌…

Java游戏项目分享

很多小伙伴学习Java&#xff0c;在学习完基础之后都会去找一些项目练手&#xff0c;用来提升自己的技术&#xff0c;在这里&#xff0c;学姐找了一些Java初级练手项目&#xff0c;供小伙伴们用来练手。下面简单介绍一下本次学姐带来的六大Java游戏项目。 Java六大初级练手项目&…

Java项目文件目录结构介绍

Java中有三个比较容易弄混的“文件夹”。 folder 文件夹 &#xff0c;普通的文件夹&#xff0c;IDE不会对他检查source folder 源文件夹 用于存放Java源代码的package java 中的包&#xff0c;必须存放在source folder 下。 src main javawebappresources 文件视图下的东西。…

如何将 Java 项目转换成 Maven 项目

亲测可用&#xff0c;若有疑问请私信 本文内容 Java 项目Maven 项目Java 项目转换成 Maven 项目 本文主要介绍如何将 Java 项目转换成 Maven 项目。首先要明确的是&#xff0c;用 Maven 管理 Java 项目的确方便。它带给你直观的方便是&#xff1a;你不用在网上找 Jar 包&…

Java项目获取路径方法

Java项目中根据相对路径和绝对路径获取文件的方法&#xff08;重要&#xff09; 首先&#xff0c;项目中文件分布情况如下&#xff0c;innerFile.txt位于test.test包下&#xff0c;innerInnerFile.txt位于test.test.inner包下&#xff0c;outterFile.txt位于包的根目录下&…

Java-银行项目

该项目用了三个类Customer,CustomerList,CustomerView。 Customer为实体对象&#xff0c;用来封装用户信息。相当于model。 CustomerList为Customer对象的管理模块&#xff0c;内部用数组管理Customer对象&#xff0c;并提供相应的添加&#xff0c;修改&#xff0c;删除和遍历…

MATLAB箱线图

MATLAB笔记之 作图 箱线图 1、峰值偏度检验 2、相关性作图 MATLAB分析数据相关性实例 3、箱线图看离散程度 如何使用matlab软件进行峰度-偏度检验https://jingyan.baidu.com/article/380abd0ab6f1c75d90192cee.html Matlab图解峰度kurtosis与偏度skewness 原1 Matlab图解峰度…

MATLAB运算符

1. MATLAB运算符 1.1 算术运算符 算术运算符运算法则算术运算符运算法则ABA与B相加(A、B为数值或矩阵)A-BA与B相减(A、B为数值或矩阵)A*BA与B相乘(A、B为数值或矩阵)A.*BA与B相应元素相乘(A、B为相同维度的矩阵)A/BA与B相除(A、B为数值或矩阵)A./BA与B相应元素相除(A、B为相同…

matlab subs函数

在matlab命令行查看subs函数的帮助 subs函数一共有三种使用方法&#xff1a; subs(s,old,new) subs(s,new) subs(s) 点击 subs 的参考页可以看到下面的详细说明: 第一种使用方法 说明&#xff1a;subs函数返回 函数s 的一个拷贝&#xff0c;s函数中的所有old变量都会替换为…

Matlab fprintf

fopen 文件访问类型 仅供学习记录 clc clear %% 01换行输出结果 fprintf([...\n...Matlab可以实现输出换行显示 \n...把你想要输出的内容换行写在[]中 \n...用换行符实现换行 \n...效果就是这样的 \n...]) %% …

数学建模与MATLAB计算之006.MATLAB中的条件语句

006.MATLAB中的条件语句 文章目录 006.MATLAB中的条件语句一、单分支if条件语句二、双分支if条件语句三、多分支if条件语句四、switch语句五、try语句 选择结构是根据给定的条件成立或不成立&#xff0c;分别执行不同的语句。 MATLAB 用于实现选择结构的语句有** if语句、swit…

matlab源码说明

目录 1.MATLAB概述 2.MATLAB程序使用几个常规注意实现 2.1.运行过程可能出现Out of Memory的问题解决办法 2.2.保存大于2G的数据 2.3.程序运行方法 1.MATLAB概述 Matlab经过不断的发展和完善,如今已成为覆盖多个学科,是具有超强数值计算能力和仿真分析能力的软件。…

Matlab逻辑运算符/与/或/非/异或/all/any

Logical()是非0则1&#xff0c;如果数字是非零&#xff0c;输出为1&#xff0c;数字为零&#xff0c;输出为0 与或非 与&#xff1a;&&#xff0c;有0则0&#xff0c;全1则1 或&#xff1a;|&#xff0c;有1则1&#xff0c;全0则0 非&#xff1a;~&#xff0c;0变1&#…

转行学计算机测试,转行软件测试后悔了

原标题&#xff1a;转行软件测试后悔了 很多时候&#xff0c;都在想当初做的转行软件测试行业的决定是对的吗&#xff1f;现在后悔还来得及吗&#xff1f; 其实我刚参加织雀教育的培训班一个月&#xff0c;各方面都学起来感觉有难度&#xff0c;毕竟是零基础转行的&#xff0c;…

【小结】南京大学软件工程专硕2021二战小结

今年的考研也告一段落了&#xff0c;从导师那里听到了一些风声&#xff0c;应该是可以上岸了&#xff0c;上班划水&#xff0c;没啥事&#xff0c;总结一下两年的混子生活吧。拟录取出来就公开。&#xff08;三百多分也舔着个脸写经验贴&#xff09; 逻辑很差、文笔稀碎、错别…