怎样制作自解压的jar文件

跨平台时自解压jni文件并加载 通过java的jar包实现依赖操作系统平台的功能时需要运用jni,依赖各平台生成的库,如dll,so等。在生成jar时一同打包这些库,其它项目直接引用此jar即可,而不需要把dll,so等库放到项目的某个目录或jdk目录。此方法需要jar有自解压功能,自解压实现如下: public final class DongleNativeLibrary { public static final String DONGLE_LIB_PREFIX = "dongle_native_libraries-. 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 原作:Z. Steve Jin and John D. Mitchell 翻译整理:eight 英文原版:http://www.javaworld.com/javaworld/javatips/jw-javatip120.html? 这是一篇描述怎样制作自解压jar文件的文章,作者通过自己编写的一个自解压程序,并把这个自解压程序以及一个manifest文件一起加入原始的jar文件中,就制作出一个可以在各种支持java的平台上运行的可以自解压的jar 文件。 自解压文件 我们先来了解一下自解压文件,在window下可以用自解压制作工具如winzip self-Extractor来制作自解压文件,这些工具会把一个zip文件与解压程序打包在一起而产生一个新的可执行文件。然后只要运行这个可执行文件,就可以把zip文件中的内容解开。那为什么要创建自解压jar文件呢,创建成自解压zip文件不就好了?但我们应该注意到自解压jar文件可以在任意支持java的平台上解开并执行,例如,可以在linux下执行。创建jar自解压文件很简单,只需要一个特殊的JAR manifest文件、一个基于java的解压程序(这个程序是原作者写的)、包含基本文件的jar 或者zip文件以及任何jsdk的jar应用程序 manifest文件 要生成可执行jar文件,需要在META-INF 目录下的manifest文件,文件名为:MANIFEST.MF ,但在我们这里我们只需要在文件中指定在这个基于java 的解压程序中包含main()的类的名称:Main-Class: ZipSelfExtractor 我们已经把一个叫做jarmanifest的文件加入到这个技巧的 源程序包中。 解压程序 你可以用各种方法来实现这个解压程序,在我们这里使用了一个简单直接的办法。首先,解压程序判断这个自解压jar文件的名称,有了这个文件名,解压程序使用解压标准,把文件解开。具体的可以查看在源码包中的ZipSelfExtractor.java文件。 值得一提的是这里用了一个很巧妙的办法获取jar文件的文件名,虽然在命令行中出现的这个文件的名字,但它并没有作为参数传入类的main()中,因此,这里使用了以下的代码来获取文件名: private String getJarFileName () { myClassName = this.getClass().getName() ".class"; URL urlJar = this.getClass().getClassLoader().getSystemResource(myClassName); String urlStr = urlJar.toString(); int from = "jar:file:".length(); int to = urlStr.indexOf("!/"); return urlStr.substring(from, to); } 请注意:getSystemResource() 中使用了myClassName而不是ZipSelfExtractor.class作参数,这使得我们可以更改加压程序的名字而不需要修改代码。 接下来,我们来分析获得这个jar文件的名字。首先,可以获取指向包含正在运行类的文件,urlStr = urlJar.toString();有了这个url,把jar文件名去掉,剩下的就是我们想要的,下面是这个url的格式: jar:file:/home/test/zipper.jar!/ZipSelfExtractor.class 有了文件名,就可以开始解压,详细的解压算法请大家自己看源码。 为了可以更方便实用,程序使用了图形界面,程序中使用了JFileChooser类可以选择要解压的目标目录。 最后程序还确保不把这两个文件:manifest文件和extractor's .class(在我们这里是ZipSelfExtractor.class)文件也解出来,程序是用来解开原始的jar的内容,而这两个文件并属于jar原始内容。 打包jar文件 有了manifest文件与解压程序,我们就可以创建自解压jar文件了,以下是一个例子: 1.创建一个zip文件Myzip.zip 2.下载 zipper.jar 3.把文件解到当前目录,准备制作自解压jar文件 java -jar zipper.jar 4.把zipper.class拷贝成 ZipSelfExtractor.class 5.把 myzip.zip 重命名为 myzip.jar 6.把myzip.jar中的内容替换为jarmanifest和ZipSelfExtractor.class这两个文件 jar uvfm myzip.jar jarmanifest ZipSelfExtractor.class 7.执行java -jar myzip.jar就可以看到效果了,试试看 后记 一个自解压的jar文件能够很好的跨平台使用,自解压jar文件创建简单,只需要有jre1.2或或者更新的版本就可以实现了。 附自解压程序的源代码: /* ZipSelfExtractor.java */ /* Author: Z.S. Jin Updates: John D. Mitchell */ import java.io.*; import java.net.*; import javax.swing.*; import java.util.zip.*; import java.util.*; import java.text.*; public class ZipSelfExtractor extends JFrame { private String myClassName; static String MANIFEST = "META-INF/MANIFEST.MF"; public static void main(String[] args) { ZipSelfExtractor zse = new ZipSelfExtractor(); String jarFileName = zse.getJarFileName(); zse.extract(jarFileName); System.exit(0); } ZipSelfExtractor() { } private String getJarFileName() { myClassName = this.getClass().getName() ".class"; URL urlJar = this.getClass().getClassLoader().getSystemResource(myClassName); String urlStr = urlJar.toString(); int from = "jar:file:".length(); int to = urlStr.indexOf("!/"); return urlStr.substring(from, to); } public void extract(String zipfile) { File currentArchive = new File(zipfile); JFileChooser fc = new JFileChooser(); fc.setCurrentDirectory(new File(".")); fc.setDialogType(JFileChooser.OPEN_DIALOG); fc.setDialogTitle("Select destination directory for extracting " currentArchive.getName()); fc.setMultiSelectionEnabled(false); fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); if (fc.showDialog(ZipSelfExtractor.this, "Select") != JFileChooser.APPROVE_OPTION) { return; //only when user select valid dir, it can return approve_option } File outputDir = fc.getSelectedFile(); byte[] buf = new byte[1024]; SimpleDateFormat formatter = new SimpleDateFormat ("MM/dd/yyyy hh:mma",Locale.getDefault()); ProgressMonitor pm = null; boolean overwrite = false; ZipFile zf = null; FileOutputStream out = null; InputStream in = null; try { zf = new ZipFile(currentArchive); int size = zf.size(); int extracted = 0; pm = new ProgressMonitor(getParent(), "Extracting files...", "starting", 0, size-4); pm.setMillisToDecideToPopup(0); pm.setMillisToPopup(0); Enumeration entries = zf.entries(); for (int i=0; i 1) ? "s": "") " from the " zipfile " archive into the " outputDir.getPath() " directory.", "Zip Self Extractor", JOptionPane.INFORMATION_MESSAGE); } catch (Exception e) { System.out.println(e); if(zf!=null) { try { zf.close(); } catch(IOException ioe) {;} } if(out!=null) { try {out.close();} catch(IOException ioe) {;} } if(in!=null) { try { in.close(); } catch(IOException ioe) {;} } } } }
【制作自解压程序】使用7Z制作自解压程序 制作双击即可直接运行,执行自解压操作,而不需要安装任何额外的软件的自解压程序 阅读详情

相关推荐

Java8对接三方流式接口,并实时输出(GPT)

【代码】Java8对接三方流式接口,并实时输出(GPT)

m0_58617940的博客 1726

自解压原理介绍及制作

自解压文件: 一个 SFX (SelF-eXtracting)自解压文件是压缩文件的一种,因为它可以不用借助任何压缩工具,而只需双击该文件就可以自动执行解压缩,因此叫做自解压文件。同压缩文件相比,自解压的压缩文件体积要大于普通的压缩文件(因为它内置了自解压程序),但它的优点就是可以在没有安装压缩软件的情况下打开压缩文件(文件类型为·exe格式)。 原理: sfx文件通常为二进制文...

d_chunyu的专栏 9173

标准恢复二极管整流器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告

报告页数: 150 图表数: 100 报告价格:¥16800 本文研究全球与中国市场标准恢复二极管整流器的发展现状及未来发展趋势,分别从生产和消费的角度分析标准恢复二极管整流器的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特点、产品规格、不同规格产品的价格、产量、产值及全球和中国市场主要生产商的市场份额。 主要生产商包括: Yangzhou Yangjie Vishay Intertechnology Power Semiconductors Inc Nexperia B

Fj69258的博客 5848

一键生成自动解压文件:WinRAR 实用技巧

WinRAR自解压技巧:让文件分享更便捷

passneo的博客 2384

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】

Mr_XiMu的博客 3741

OpenOCD入门到精通:第20章 Target 子系统源码分析

摘要:本章深入分析OpenOCD Target子系统的核心实现机制。重点包括:1) 通过target_type虚函数表实现多架构抽象,支持ARM、RISC-V等30+种目标;2) ARM ADIv5协议栈实现,包含DAP/AP核心数据结构和访问机制;3) 分层架构设计,从调试接口层到传输层的完整调用链路。系统采用面向对象思想,统一管理目标状态、寄存器缓存、断点/观察点等调试要素,为上层提供标准化的调试操作接口。

从事嵌入式linux android驱动开发,拥有全栈能力 178

WinRAR自解压详细教程

如果要检验的话,那就把原文件“三国演义.txt”给删除,然后双击自解压文件,会得到一个新的“三国演义.txt”文件。但是自解压文件不一样,它不需要依靠第三方软件,如果没有WinRAR的话,它也可以解压文件。就比方说,压缩文件也是WinRAR给压缩的,而如果没有WirRAR的话,无法压缩。虽然,自解压文件比压缩文件大,但是自解压文件是不需要其他软件依靠的。文件变成exe文件,最后点击确定,就成功得到自解压文件了。查看自解压文件,其大小比压缩文件大,但是比原文件小。点击“三国演义.txt”文件右键,点击属性。

Xioaxiang_的博客 2350

激光焦点动态跟踪技术实战大揭秘:电容式与同轴视觉的巅峰对决

激光焦点动态跟踪技术是保证激光加工质量的关键因素。本文对比评测了电容式和同轴视觉两种主流技术:电容式响应速度快、成本低,适合高速稳定加工环境,但易受电磁干扰;同轴视觉精度高、抗干扰强,适合精密加工和复杂工件,但成本较高且处理速度受限。评测结果表明,企业应根据加工需求、预算和环境选择合适技术。未来该技术将向智能化、多技术融合方向发展,为工业应用提供更优解决方案。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 124

无需工具就能打开压缩包:自解压功能使用全攻略

什么是自解压文件?一键打开的压缩包你会用吗

passneo的博客 3983

【以太网硬件六】1000base-T物理层编码究竟是怎么编的?

详述1000base-T物理层4D-PAM5的编码过程

highman110的博客 5324

基于YOLOv11的工业装配完整性智能检测系统

在现代工业生产中,产品质量控制是确保企业竞争力的关键环节。其中,装配完整性检查——即检测产品是否安装了所有应有的部件,是质量检测中的重要一环。传统的人工检测方法存在效率低、易疲劳、主观性强等问题。本文提出了一种基于深度学习的目标检测算法YOLOv11的工业装配完整性智能检测系统,通过计算机视觉技术自动识别和验证产品装配的完整性。本文将详细阐述从数据准备、模型训练到系统部署的完整流程,提供可执行的代码实现,并介绍一个适用于该任务的参考数据集。

YOLO 551

怎样制作自解压jar文件

这是一篇描述怎样制作自解压jar文件的文章,作者通过自己编写的一个自解压程序,并把这个自解压程序以及一个manifest文件一起加入原始的jar文件中,就制作出一个可以在各种支持java的平台上运行的自解压的jar   文件。    自解压文件    我们先来了解一下自解压文件,在window下可以用自解压制作工具如winzip   self-Extractor来制作自解压文件,这些工

tomora的专栏 1153

040、全志V853低功耗AI视觉平台的ISP调优——电池供电场景下的画质与功耗平衡

本文分享了全志V853 AI视觉平台在电池供电场景下的ISP调优经验。作者通过实际项目踩坑案例,揭示了V853 ISP的特殊性:不同于主流平台,其ISP与CPU共享时钟域,降噪能力有限,需特别注意功耗控制。关键优化策略包括:关闭无效ISP模块、优化Sensor联动时钟、采用场景自适应配置、开发快速启动模式等。特别指出V853个体差异大,量产需考虑高低温影响。文章强调V853的ISP功耗优化需从寄存器级别精打细算,不能简单套用其他平台经验,建议选型时单独评估ISP功耗,避免续航缩水。

zzfmlxs的博客 25

java 制作exe

1.eclipse里导出jar export->java->JAR file->Export generated class and resources 2.用exe4j制作启动exe 把jre,lib(引用的外部类),exampack.jar 放到一个目录下,如图: 打开exe4j,选取Regular mode Regular mode -> Java invo

fsp88927的专栏 660

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java可执行jar自解压jar内指定文件到指定目录

Java可执行jar自解压jar内指定文件到指定目录 参考链接 感谢大神【手动膜拜】 https://www.devx.com/tips/Tip/22124 打开慢的话可以直接看下图 需求说明 需求来源于最近的一个springboot服务,源于各种原因其内打包了部分文件或者脚本,需要在jar运行的时候自动解压到jar外目录,方便自身或者其他服务调用。 比如下图中的scratches目录,想将这个目录以及目录下的所有文件都提取到jar外。 springboot服务中的目录结构 打成jar包之后的目录结构

keylkeaf的博客 2849

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java 创建自解压文件_自解压的jar实现原理

自解压的jar实现原理作者:Turbo Chen日期:2004/2/8在网络上,有些java程序的提供者将他们的java安装程序打包成一个jar文件的形式。当运行时,自动将jar中的程序解压出来安装到使用者的电脑上。他们是如何做到这些的呢?现在我们就来解开这个迷,让大家了解如果制作这样的jar文件。首先,我们来回忆一下,以前我们打包jar时,通常将class程序要用到的资源如*.gif图片、*.x...

weixin_30789297的博客 359

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

自解压的jar实现原理

<!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--><script type="text/javascript"

zgqtxwd的专栏 499

【java】将文件夹打包成一个单独的exe文件

通过前面的一些工作,笔者已经做了以下的工作: 将一个java项目打包成了独立的、包含所有依赖的jar包文件; 将jar包文件生成了一个可执行的exe文件,同时将jre文件也拷了出来,以便于没有安装jdk的系统上同样可以运行; 今天,笔者要做的是将上面的三个文件压缩为一个exe文件,方便不熟悉的用户使用,注意,该方法适合于所有的程序,即无论您是用什么语言写的,只要您已经生成了exe文件都可...

XYZ 4191

JWM原生库加载机制揭秘:JAR包如何自解压DLL/Dylib/SO实现零依赖分发

Java 跨平台窗口管理库 **JWM** 让 Java 程序直接调用 Win32、X11 和 macOS 原生 API 创建高性能窗口,而它最精妙的工程设计是:一个 JAR 包就包含全部三平台的原生库(`jwm_x64.dll`、`libjwm_arm64.so`、`libjwm_arm64.dylib`),首次运行时自动解压到系统临时目录并加载,实现真正的**零依赖分发**。本文带你完整揭秘这

gitblog_00433的博客 388

为什么SpringBoot的jar可以直接运行?

为什么SpringBoot的jar可以直接运行?

java1234的博客 773

jar包生成exe文件的工具集

随着Java在应用产品开发中的广泛应用,基于Java的应用产品也就越来越多,那么如何为基于Java的应用产品制作安装程序的需求就产生了。以前人们一般都是使用InstallShield与InstallAnyWhere进行产品安装程序的制作,这是两个功能非常强大、易用的安装盘制作工具,尤其是InstallAnyWhere,它还支持Java应用产品安装制作,例如:大名鼎鼎的Jbuilder安装程序就是由

用心做事 1831

利用WinRAR将jar包封装成exe文件

过程: 1.准备以下文件: 图标文件:icon.ico 运行文件:run.bat java运行环境:jre(文件夹) 运行的jar包 其中run.bat文件内容为: start jre1.8.0_152\bin\javaw.exe -Dfile.encoding=utf-8 -jar MedicalAssistantHXPC.jar 包括用javaw.exe启动,编码格式...

weixin_30466039的博客 352

JAR解压缩方法

JAR解压缩方法作者:hunhun1981出自:http://blog.youkuaiyun.com/hunhun1981/        下面这些代码,是用来解压jar文件的(我自己写了一个打包工具,专门用于修改配置文件并对原始JAR进行二次发布)。第一种是使用JarFile类来完成功能,大家可以稍加修改,集成ClassLoader既可以实现一个自解压的JAR包。package

1万+

移动安全工具-jar

jar

深度安全实验室 202
上一篇: 2002年第一期 XML类精彩问答
下一篇: 用JNI技术提高Java的性能
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值