Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1945597
  • 博文数量: 1000
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 7921
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-20 09:23
个人简介

storage R&D guy.

文章分类

全部博文(1000)

文章存档

2019年(5)

2017年(47)

2016年(38)

2015年(539)

2014年(193)

2013年(178)

分类: 服务器与存储

2015-10-20 14:54:05

今天想试试Linux系统下把java应用程序打包成.jar文件,在网上找了很多相关的博客,发现他们理论讲得很到位,但是按照他们的方式操作发现很多错误,最后综合几篇文章终于尝试成功。多学习别人的失败,更容易带你走向成功,现在把自己操作过程罗列出来(步骤中有部分错误,正是在错误中一步步摸索才获得了最终的成功)。至于理论部分我会在文章末尾贴出来(参考别人文章写的)。如果我理论部分整理的不是很好的话,你可以多参考网上的文章。

实验前准备FileLength.java 文件一份

实验环境:CentOS6.0  JDK1.6.0_03

实验目的:将FileLength.java文件打包成test.jar文件

实验步骤:

        <1>javac FileLength.java  编译程序产生FileLength.class文件;

        <2>jar -cvf test.jar FileLength.class  打包成test.jar文件,以下是运行结果:

                   added manifest
                   adding: FileLength.class(in = 506) (out= 373)(deflated 26%)

         通过结果可以看出,系统自动帮你添加了manifest文件(这个文件的作用后面讲)。另外,jar命令的使用,自己参考参考网上jar命令的讲解。

         <3>java -jar test.jar 运行test.jar文件 ;运行后出现以下错误:Failed to load Main-Class manifest attribute from test.jar,错误提示:找不到main-class

         <4>解决办法:jar -xf test.jar 解压文件,你会发现你当前目录中多了个MENT-INF文件夹,进入该文件夹用vim打开MANIFEST.MF文件,文件内容如下:

                    Manifest-Version: 1.0
                    Created-By: 1.6.0_20 (Sun Microsystems Inc.)

           现在你要做的就是,在文件中添加内容Main-class: FileLength (FileLength为main方法所在的文件)。这么做的目的是系统可以找到main-class。该文件的最终内容为:

                   Manifest-Version: 1.0
                   Created-By: 1.6.0_20 (Sun Microsystems Inc.)

                   Main-class: FileLength

          <5>jar -cvfm test.jar MANIFEST.MF FileLength.class 重新打包

          <6>java -jar test.jar 就可以运行成功了,试试看吧

理论基础

           JAR 文件就是 Java Archive File,顾名思意,它的应用是与 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

            MANIFEST.MF:打包清单。它是打包的关键性文件,主要是设置执行入口类和支持库的路径,在运行Java应用程序时要根据此文件中的内容来查找入口类和支持库。    

阅读(1149) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~