怎样制作自解压的jar文件

这是一篇描述怎样制作自解压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原始内容。

时间: 2024-09-20 04:12:46

怎样制作自解压的jar文件的相关文章

"package中的javac,java用法" && "制作可执行jar文件"

执行 java初学者最早会用的命令无非是就是javac和java,但即使这么简单命令也还会把我们弄得头皮发麻 -__- .Roger下面就"package中的javac,java用法"和"制作可执行jar文件"做点简单的解释. 最基础的东西就不废话了,至于package先讲讲我的理解,因为我觉得知道这点对于开发还是很有帮助的.举个例子说:有两个类Tom和Jerry同属于一个package--Partners //Tom.javapackage Partners;pu

winrar制作自解压exe文件的方法

我试着打开了这个exe文件,果然打开了一个PPT.而且居然还在旁边生成了许多文件,看起来就像把一个压缩包解压了一样,里面的文件散落了一地.这种文件被称为自解压文件.那么这样的文件是怎么制成的呢? 利用winrar制作自解压文件:确保电脑上安装有winrar的基础上,在需要压缩的文件或文件夹上右击,在右键菜单中选择"添加到压缩文件",然后将"常规"--"压缩选项"下的"创建自解压格式文件"打钩,再确定即可. 自解压文件:一个 S

在Windows XP下轻松制作自解压文件

提到制作自解压文件,很多朋友都会立刻想到一些著名的压缩软件. 其实如果你的操作系统是Windows XP话,大可不必这么折腾,因为Windows XP已经为我们准备了一个好用的自解压文件制作工具了. 打开"开始"菜单,在"运行"对话框中输入iexpress,即可打开"IExpress Wizard"界面(如图1). 图1 IExpress Wizard界面图 1. 首先,该工具提示我们要为此自解压文件创建一个管理文件来保存自解压程序的相关信息.选

二种jar包制作方法讲解(dos打包jar eclipse打包jar文件)_java

1.在dos下面打包jar文件 复制代码 代码如下: D:\jdk1.5.0_07\bin> jar  /help 用法:jar  {ctxu}[vfm0Mi]  [jar-文件]  [manifest-文件]  [-C  目录]  文件名  ... 选项: -c  创建新的存档 -t  列出存档内容的列表 -x  展开存档中的命名的(或所有的]文件 -u  更新已存在的存档 -v  生成详细输出到标准输出上 -f  指定存档文件名 -m  包含来自标明文件的标明信息 -0  只存储方式:未用Z

制作jar文件

JAR 文件就是 Java Archive File,顾名思意,它的 应用是与 Java 息息相关的,是 Java 的一种文档格式.JAR 文件非常类似 ZIP 文件--准确的说,它就是 ZIP 文件,所以叫它文件 包.JAR 文件与 ZIP 文件唯一的区别就是在 JAR 文件的内容中,包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在 生成 JAR 文件的时候自动创建的 jar 命令详解 jar 是随 JDK 安装的,在 JDK 安装目录下的 bin 目录中,Window

JAVA 中 jar 文件的编写和应用

JAVA中jar文件的编写和应用     我想JAVA的爱好者,尤其是初学者大都有过这样的经历,就是喜欢JAVA编程语言(这个人的情况可能不一样),但是有时候总会觉得JAVA的优点便是她的"致命"的缺点.大家的信念依旧是"一次编译,到处运行"但是就是因为至一点JAVA失去了好多,我们也失去了好多.也许大家都知道,现在业界最推崇的还是微软的技术微软的产品..net/c#/.vb/vb.net还是最流行的语言,最受欢迎的软件开发语言.因为这些语言都太好学太好用了.不像J

双击Jar文件运行

问题描述 jar程序的运行我在JDK中制作了可执行Jar文件.通过java-jar命令运行成功,但双击运行没反应.该程序没有可视化界面.希望能得到指点,谢谢! 解决方案 解决方案二:用eclipse生成就可以了解决方案三:对有的时候是这样的解决方案四:你应该在程序中填点提示语之类的代码,如当程序跑起来时弹出一个对话框.注意:不要用System.out.println(),用这个的话,你是看不到结果的.还有,检查一下你的jar包是否打对了,推荐一个打包工具fatjar.jar,用这个插件在MyEc

将某一目录下所有的jar文件都加入到CLASSPATH当中的简便写法

将某一目录下所有的jar文件都加入到CLASSPATH当中的简便写法 引用: http://www.javaeye.com/topic/244?page=2 中将某一目录下所有的jar文件都加入到CLASSPATH的写法,比较长:)   Quake Wang 写道 代码 FOR %%i IN ("%HIBERN8IDE%/*.jar") DO CALL "setclasspath.bat" %%i      setclasspath.bat: 代码 SET _CLA

关于osgi中的bundle转换成普通的jar文件

最近在做eclipse插件的开发工作,由于项目需要,要将现在基于插件结构的部分功能集成到新的项目中,但是新项目不是基于插件架构的,请问,将现有的几个插件文件打成jar文件,直接集成到新项目中在新项目中调用api,可以吗?