`
ihuashao
  • 浏览: 4546548 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

制作可执行的JAR文件包

阅读更多

制作可执行的JAR文件包及

jar命令详解zt


如何把java程序编译成.exe文件。通常回答只有两种,一种是制作一个可执行的 JAR文件包,然后就可以像.chm文档一样双击运行了;而另一种是使用JET来进行编译。但是JET是要用钱买的,而且据说JET 也不是能把所有的Java程序都编译成执行文件,性能也要打些折扣。所以,使用制作可执行JAR文件包的方法就是最佳选择了,何况它还能保持 Java的跨平台特性。

下面就来看看什么是JAR文件包吧:

1.JAR文件包

JAR文件就是JavaArchiveFile,顾名思意,它的应用是与Java息息相关的,是Java的一种文档格式。 JAR文件非常类似ZIP文件——准确的说,它就是ZIP文件,所以叫它文件包。JAR文件与ZIP文件唯一的区别就是在JAR文件 的内容中,包含了一个META-INF/MANIFEST.MF文件,这个文件是在生成JAR文件的时候自动创建的。举个例子,如果我们具有如下 目录结构的一些文件:

  ==

  `--test

   `--Test.class

把它压缩成ZIP文件test.zip,则这个ZIP文件的内部目录结构为:

  test.zip

  `--test

   `--Test.class

如果我们使用JDK的jar命令把它打成JAR文件包test.jar,则这个JAR文件的内部目录结构为:

  test.jar

  |--META-INF

  | `--MANIFEST.MF

  `--test

    `--Test.class

2.创建可执行的JAR文件包

制作一个可执行的JAR文件包来发布你的程序是JAR文件包最典型的用法。

Java程序是由若干个.class文件组成的。这些.class文件必须根据它们所属的包不同而分级分目录存放;运行前需要把所有用 到的包的根目录指定给CLASSPATH环境变量或者java命令的-cp参数;运行时还要到控制台下去使用java命令来运行,如果需 要直接双击运行必须写Windows的批处理文件(.bat)或者Linux的Shell程序。因此,许多人说,Java是一种方便开 发者苦了用户的程序设计语言。

其实不然,如果开发者能够制作一个可执行的JAR文件包交给用户,那么用户使用起来就方便了。在Windows下安装JRE (JavaRuntimeEnvironment)的时候,安装文件会将.jar文件映射给javaw.exe打开。那么,对于一个可执行 的JAR文件包,用户只需要双击它就可以运行程序了,和阅读.chm文档一样方便(.chm文档默认是由hh.exe打开的)。那么,现 在的关键,就是如何来创建这个可执行的JAR文件包。

创建可执行的JAR文件包,需要使用带cvfm参数的jar命令,同样以上述test目录为例,命令如下:

jarcvfmtest.jarmanifest.mftest

这里test.jar和manifest.mf两个文件,分别是对应的参数f和m,其重头戏在manifest.mf。因为要创 建可执行的JAR文件包,光靠指定一个manifest.mf文件是不够的,因为MANIFEST是JAR文件包的特征,可执行的 JAR文件包和不可执行的JAR文件包都包含MANIFEST。关键在于可执行JAR文件包的MANIFEST,其内容包含了Main -Class一项。这在MANIFEST中书写格式如下:

Main-Class:可执行主类全名(包含包名)

例如,假设上例中的Test.class是属于test包的,而且是可执行的类(定义了publicstaticvoidmain(String[])方法),那么这个manifest.mf可以编辑如下:

Main-Class:test.Test<回车>;

这个manifest.mf可以放在任何位置,也可以是其它的文件名,只需要有Main-Class:test.Test一行,且该行以一个回车符结束即可。创建了manifest.mf文件之后,我们的目录结构变为:

  ==

  |--test

  | `--Test.class

  `--manifest.mf

这时候,需要到test目录的上级目录中去使用jar命令来创建JAR文件包。也就是在目录树中使用“==”表示的那个目录中,使用如下命令:

jarcvfmtest.jarmanifest.mftest

之后在“==”目录中创建了test.jar,这个test.jar就是执行的JAR文件包。运行时只需要使用java-jartest.jar命令即可。

需要注意的是,创建的JAR文件包中需要包含完整的、与Java程序的包结构对应的目录结构,就像上例一样。而Main-Class 指定的类,也必须是完整的、包含包路径的类名,如上例的test.Test;而且在没有打成JAR文件包之前可以使用java<类名 >;来运行这个类,即在上例中javatest.Test是可以正确运行的(当然要在CLASSPATH正确的情况下)。

3.jar命令详解

jar是随JDK安装的,在JDK安装目录下的bin目录中,Windows下文件名为jar.exe,Linux下文件名 为jar。它的运行需要用到JDK安装目录下lib目录中的tools.jar文件。不过我们除了安装JDK什么也不需要做,因为 SUN已经帮我们做好了。我们甚至不需要将tools.jar放到CLASSPATH中。

使用不带任何的jar命令我们可以看到jar命令的用法如下:

jar{ctxu}[vfm0M][jar-文件][manifest-文件][-C目录]文件名...

其中{ctxu}是jar命令的子命令,每次jar命令只能包含ctxu中的一个,它们分别表示:

-c 创建新的JAR文件包

-t 列出JAR文件包的内容列表

-x 展开JAR文件包的指定文件或者所有文件

-u 更新已存在的JAR文件包(添加文件到JAR文件包中)

[vfm0M]中的选项可以任选,也可以不选,它们是jar命令的选项参数

-v 生成详细报告并打印到标准输出

-f 指定JAR文件名,通常这个参数是必须的

-m 指定需要包含的MANIFEST清单文件

-0 只存储,不压缩,这样产生的JAR文件包会比不用该参数产生的体积大,但速度更快

-M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略-m参数

[jar-文件]即需要生成、查看、更新或者解开的JAR文件包,它是-f参数的附属参数

[manifest-文件]即MANIFEST清单文件,它是-m参数的附属参数

[-C目录]表示转到指定目录下去执行这个jar命令的操作。它相当于先使用cd命令转该目录下再执行不带-C参数的jar命令,它只能在创建和更新JAR文件包的时候可用。  

文件名...指定一个文件/目录列表,这些文件/目录就是要添加到JAR文件包中的文件/目录。如果指定了目录,那么jar命令打包的时候会自动把该目录中的所有文件和子目录打入包中。

下面举一些例子来说明jar命令的用法:

1)jarcftest.jartest

该命令没有执行过程的显示,执行结果是在当前目录生成了test.jar文件。如果当前目录已经存在test.jar,那么该文件将被覆盖。

2)jarcvftest.jartest

该命令与上例中的结果相同,但是由于v参数的作用,显示出了打包过程,如下:

标明清单(manifest)

增加:test/(读入=0)(写出=0)(存储了0%)

增加:test/Test.class(读入=7)(写出=6)(压缩了14%)

3)jarcvfMtest.jartest

该命令与2)结果类似,但在生成的test.jar中没有包含META-INF/MANIFEST文件,打包过程的信息也略有差别:

增加:test/(读入=0)(写出=0)(存储了0%)

增加:test/Test.class(读入=7)(写出=6)(压缩了14%)

4)jarcvfmtest.jarmanifest.mftest

运行结果与2)相似,显示信息也相同,只是生成JAR包中的META-INF/MANIFEST内容不同,是包含了manifest.mf的内容

5)jartftest.jar

在test.jar已经存在的情况下,可以查看test.jar中的内容,如对于2)和3)生成的test.jar分别应该此命令,结果如下;

对于2)

META-INF/

META-INF/MANIFEST.MF

test/

test/Test.class

对于3)

test/

test/Test.class

6)jartvftest.jar

除显示5)中显示的内容外,还包括包内文件的详细信息,如:

0WedJun1915:39:06GMT2002META-INF/

86WedJun1915:39:06GMT2002META-INF/MANIFEST.MF

0WedJun1915:33:04GMT2002test/

7WedJun1915:33:04GMT2002test/Test.class

7)jarxftest.jar

解开test.jar到当前目录,不显示任何信息,对于2)生成的test.jar,解开后的目录结构如下:

  ==

  |--META-INF

  | `--MANIFEST

  `--test

    `--Test.class

8)jarxvftest.jar

运行结果与7)相同,对于解压过程有详细信息显示,如:

创建:META-INF/

展开:META-INF/MANIFEST.MF

创建:test/

展开:test/Test.class

9)jaruftest.jarmanifest.mf

在test.jar中添加了文件manifest.mf,此使用jartf来查看test.jar可以发现test.jar 中比原来多了一个manifest。这里顺便提一下,如果使用-m参数并指定manifest.mf文件,那么manifest.mf是作 为清单文件MANIFEST来使用的,它的内容会被添加到MANIFEST中;但是,如果作为一般文件添加到JAR文件包中,它跟一般文件无 异。

10)jaruvftest.jarmanifest.mf

与9)结果相同,同时有详细信息显示,如:

增加:manifest.mf(读入=17)(写出=19)(压缩了-11%)

4.关于JAR文件包的一些技巧

1)使用unzip来解压JAR文件

在介绍JAR文件的时候就已经说过了,JAR文件实际上就是ZIP文件,所以可以使用常见的一些解压ZIP文件的工具来解压 JAR文件,如Windows下的WinZip、WinRAR等和Linux下的unzip等。使用WinZip和 WinRAR等来解压是因为它们解压比较直观,方便。而使用unzip,则是因为它解压时可以使用-d参数指定目标目录。

在解压一个JAR文件的时候是不能使用jar的-C参数来指定解压的目标的,因为-C参数只在创建或者更新包的时候可用。那么需 要将文件解压到某个指定目录下的时候就需要先将这具JAR文件拷贝到目标目录下,再进行解压,比较麻烦。如果使用unzip,就不需要这么麻烦了, 只需要指定一个-d参数即可。如:

unziptest.jar-ddest/

2)使用WinZip或者WinRAR等工具创建JAR文件

上面提到JAR文件就是包含了META-INF/MANIFEST的ZIP文件,所以,只需要使用WinZip、WinRAR等 工具创建所需要ZIP压缩包,再往这个ZIP压缩包中添加一个包含MANIFEST文件的META-INF目录即可。对于使用jar 命令的-m参数指定清单文件的情况,只需要将这个MANIFEST按需要修改即可。

3)使用jar命令创建ZIP文件

有些Linux下提供了unzip命令,但没有zip命令,所以需要可以对ZIP文件进行解压,即不能创建ZIP文件。如要 创建一个ZIP文件,使用带-M参数的jar命令即可,因为-M参数表示制作JAR包的时候不添加MANIFEST清单,那么只 需要在指定目标JAR文件的地方将.jar扩展名改为.zip扩展名,创建的就是一个不折不扣的ZIP文件了,如将上一节的第3)个 例子略作改动:

jarcvfMtest.ziptest



[第二篇]

生成可执行jar文件的教程


若要生成一个名为cal.jar的可执行jar文件:(文件名可以是任意合法名字)
(这是我认为简单实用的一种方法,还有很多别的方法在此就不介绍了)
第一把程序生成的所有字节码文件(即.class文件)放在同一个目录下(如:D:/chat/).
第二在该目录下新建一个manifest.mf文件,文件内容格式如下(划线中内容):
manifest.mf文件中的格式:
--------------------------------
Main-Class:calDemo

--------------------------------
注意:calDemo代表主类名(即要运行的类名,只能有一个,不要文件扩展名)
Main与Class中间不是下划线,而是短横线
Main-Class:与calDemo中间必须要有空格
Main-Class:calDemo之后必须要回车


文件中还可以加入一些其他信息如:(先不要加,以免出错)

--------------------------------------------
Manifest-Version:1.0
Created-By:1.4.1_02(SunMicrosystemsInc.)
--------------------------------------------

然后用jar命令生成可执行的jar文件,例如:
(执行该命令前先要转到该目录下D:/chat/)
jarcvfmcal.jarmanifest.mf*.class

jar用法:(仅供参考,初学者可跳过这部分内容)
jar{ctxu}[vfm0Mi][jar-文件][manifest-文件][-C目录]文件名...
选项:
-c创建新的存档
-t列出存档内容的列表
-x展开存档中的命名的(或所有的〕文件
-u更新已存在的存档
-v生成详细输出到标准输出上
-f指定存档文件名
-m包含来自标明文件的标明信息
-0只存储方式;未用ZIP压缩格式
-M不产生所有项的清单(manifest〕文件
-i为指定的jar文件产生索引信息
-C改变到指定的目录,并且包含下列文件:
如果一个文件名是一个目录,它将被递归处理。
清单(manifest〕文件名和存档文件名都需要被指定,按'm'和'f'标志指定的相同顺序。

示例1:将两个class文件存档到一个名为'classes.jar'的存档文件中:
jarcvfclasses.jarFoo.classBar.class
示例2:用一个存在的清单(manifest)文件'mymanifest'将foo/目录下的所有
文件存档到一个名为'classes.jar'的存档文件中:
jarcvfmclasses.jarmymanifest-Cfoo/.


分享到:
评论

相关推荐

    制作可执行的JAR文件包及jar命令详解

    常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,...所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Java 的跨平台特性。

    [精华] 制作可执行的JAR文件包及jar命令详解zt

    可执行的JAR文件包 常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样双击运行了;而另一种是使用 JET 来进行 编译。...

    JAR文件包及jar命令详解

    如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样...所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Java 的跨平台特性

    JAR文件包及jar命令详解.CHM

    JAR文件包及jar命令详解.CHM &lt;br&gt; JAR文件包及jar命令详解 常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样...

    java 程序都编译成执行文件jar命令详解

    如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm 文档一样...所以,使用制作可执行 JAR 文件包的方法就是最佳选择了,何况它还能保持 Java 的跨平台特性

    制作可执行的JAR文件包及jar命令详解.doc

    制作可执行的JAR文件包及jar命令详解 ,初学者可以边看边学习

    制作可执行jar文件【3中方法】

    制作可执行jar文件【3中方法】

    制作可执行的JAR文件包及jar命令详解zt.doc

    制作可执行的JAR文件包及jar命令详解zt.doc

    使用Built Fat Jar 制作可执行jar

    使用Built Fat Jar 制作可执行jar , 图文并茂 第一步,选中项目根节点后,点击右键,在弹出菜单中选择Build Fat Jar第二步,设置Jar-Name这是生成的jar文件名称 第三步、选择要打包的已编译的class文件 第四步、点击...

    jar包打成exe可执行文件工具

    eclipse开发的项目导出jar包,然后制作成exe文件; 带工具和操作文档。

    java打包成jar

    java打包成jar有多种方法,有jar命令,有eclipse有相关操作,有制作完成的jar文件就是可执行的,文件有详细操作步骤

    exe4j - java可执行程序jar的生成工具,进而完成jar包转exe

    exe4j是一个帮助你集成Java应用程序到Windows操作环境的java可执行文件生成工具,无论这些应用是用于服务器,还是图形用户界面(GUI)或命令行的应用程序。

    将java程序打包成可执行文件

    把 java项目 打包成 exe 可执行文件! 如何打包跨平台的.exe文件。安装后运行左窗窗口标有十步。 第1步 : 完全略过,直接点Next 第2步 : 我们选择“JAR in EXE mode” 就是选择我们已经有制作好的jar文件。 第3步...

    Build Fat-JAR

    使用: 安装后,可以在 [Export] 向导里找到 "Build Fat-JAR",然后根据提示即可完成打包。...打包完成之后,可以直接通过java -jar 执行打包好的jar文件,不需要设置classpath,以及配置其他jar文件。

Global site tag (gtag.js) - Google Analytics