站内搜索: 请输入搜索关键词

当前页面: JAVA 编程资料牛鼻论坛Java & J2SE 技术区→再议JAR文件

再议JAR文件

发表新主题   回复此主题

第1楼 2005-01-04 08:38 ★星の金币 写道:

再议JAR文件


前些天,看了一本清华大学《JAVA使用教程(第二版)》,里面有一些关于介绍JAR文件方面的内容,现摘抄如下,以供大家参考:

1.将应用程序压缩为jar文件

可以使用jar.exe把一些文件压缩成一个JAR文件,来发布我们的应用程序。我们可以把java应用程序中涉及到的类压缩成一个JAR文件,比如Tom.jar,然后使用java解释器(使用参数-jar)执行这个压缩文件,或用鼠标双击该文件,执行这个压缩文件。
java -jar Tom.jar
假设应用程序中有两个类A、B,其中A是主类,生成一个JAR文件的步骤如下:
(1)首先,用文本编辑器(比如Windows下的记事本)编写一个清单文件Mymoon.mf:
Manifest-version: 10
Main-Class: A
Created-By: 1.2.2(sun Microsystems Inc.):
比如,保存Mymoon.mf到D:\test。需要注意的是在编写清单文件时,在“Manifest-version:”和“1.0”之间、“Main-Class:”和主类“A”之间,以及“Created-By:”和“1.2.2”之间必须有且只有一个空格。
(2)生成JAR文件
D:\test\jar cfm Tom.jar Mymoon.mf A.class B.class
其中参数c边式要生成一个新的JAR文件;f表示要生成的JAR文件的名字;m表示文件清单文件的名字
注:如果机器安装过WinRAR解压软件,并将.jar文件与该解压缩软件做了关联,那么Tom.jar文件的类型是WinRAR,使得Java程序无法运行。因此,我们在发布软件时,还应该再写一个有如下内容的bat文件Tom.bat:
javaw -jar Tom.jar

2.将类压缩成jar文件

我们可以使用jar.exe把一些类的字节码文件压缩成一个JAR文件,然后将这个JAR文件存放到JAVA运行环境的扩展框架中,即将 该JAR文件存放在JDK安装目录的jre\lib\ext文件夹中。这样,其他的程序就可以使用这个JAR文件中的类来创建对象了。
现在,我们就将D:\test中的Test1.class和Test2.class压缩成一个JAR文件Jerry.jar:
Test1.java
1
2
3
4
5
public class Test1
         { public void fTest1()
           { System.out.println("I am a method In Test1  class");
           }
          }

Test2.java
1
2
3
4
5
public class Test2
         { public void fTest2()
           { System.out.println("I am a method In Test2  class");
           }
          }


(1)首先编写一个清单文件(Manifestfiles)
moon.mf
Manifest-version: 1.0
Class: Test1 Test2
Created-By: 1.2.2(Sun Microsystems Inc.)
保存moon.mf到D:\test
(2)生成JAR文件
D:\test\jar cfm Jerry.jar moon.mf Test1.class Test2.class


第2楼 2013-08-31 12:44 Robot :

再议JAR文件 相关


第3楼 2005-01-04 08:54 ★星の金币 写道:

Re:再议JAR文件


刚些完……
好累…… 喝口水~

自己先顶一下~
嘿嘿~
希望对大家有用哦~


第4楼 2005-01-04 17:55 esteem 写道:

Re:再议JAR文件


这个东西 喜欢呀
不过有些不怎么明白 这是不是要下个 jar.exe?


第5楼 2005-01-05 05:00 ★星の金币 写道:

Re:再议JAR文件


晕...
JAR.EXE是在你安装完JDK后,在..(安装JDK的位置)\bin\ 目录下
也就是跟 JAVAC与JAVA在同一目录下.


第6楼 2005-01-05 16:47 duduing 写道:

Re:再议JAR文件


很好,3Q


第7楼 2005-01-12 06:50 xinuer_bin 写道:

Re:再议JAR文件


比如,保存Mymoon.mf到D:\test中,
如果把文件保存在任意目录下可以压缩成.jar文件吗?
例如:E:\test\java cfm Jerry.jar moon.mf Test1.class Test2.class


第8楼 2005-01-12 07:49 liudafang 写道:

Re:再议JAR文件


不错,很实用得帖子,我想问下压缩文件得命令,是jar filepath/filename ?


第9楼 2005-01-12 13:16 ylxxwb 写道:

Re:再议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' 的存档文件中:
jar cvf classes.jar Foo.class Bar.class
示例2:用一个存在的清单(manifest)文件 'mymanifest' 将 foo/ 目录下的所有
文件存档到一个名为 'classes.jar' 的存档文件中:
jar cvfm classes.jar mymanifest -C foo/ .


第10楼 2005-01-13 03:48 ayeah 写道:

Re:再议JAR文件


我也提个问题:如果要在jar程序里存取配置文件,例如xml,这个xml文件应该放在哪里呢?


第11楼 2005-02-22 08:09 chineseboy 写道:

Re:再议JAR文件


我不明白楼上的问题是什么意思,不管是什么文件(.java,.class,.xml,.txt)都可以用jar命令来打包的。


第12楼 2005-02-22 08:22 chineseboy 写道:

Re:再议JAR文件


我不明白楼上的问题是什么意思,不管是什么文件(.java,.class,.xml,.txt)都可以用jar命令来打包的。


第13楼 2005-03-05 01:05 qianlei 写道:

Re:再议JAR文件


请问:★星の金币如果在程序中加载图片的话改如何打包?
谢谢!


第14楼 2005-03-05 01:13 qianlei 写道:

Re:再议JAR文件


知道了!直接就可打包文件夹!


第15楼 2005-03-05 14:39 Reeves1016 写道:

Re:再议JAR文件


好像dll文件不可以打包,谁有办法吗?


第16楼 2005-03-19 13:13 java_yw 写道:

有问题请教!!


我生成了jar文件!
用java -jar Mymoon.jar也可以执行!但为什么双击鼠标就没反应???


第17楼 2005-03-19 13:34 fengyun8972 写道:

Re:再议JAR文件


要是想生成exe应用程序该怎么办呀!


第18楼 2005-03-19 15:53 ★星の金币 写道:

Re:有问题请教!!


引用原文:
java_yw wrote:
我生成了jar文件!
用java -jar Mymoon.jar也可以执行!但为什么双击鼠标就没反应???



在一般 的打印 程序中 双击后 都是一闪就没了。。
所以 你就觉得好像 它没发生一样。。
这种 情况 你最好 还是进入字符界面 在用javaw -jar执行它


第19楼 2005-03-25 13:11 jnzsk 写道:

Re:再议JAR文件


3Q


第20楼 2005-03-25 15:54 airwt 写道:

Re:再议JAR文件


学习ing~~~


第21楼 2005-03-25 17:00 lijiuu 写道:

Re:再议JAR文件


C:\java>jar cvfm AppGraIo.jar AppGraIo.class
java.io.IOException: invalid header field
at java.util.jar.Attributes.read(Attributes.java:389)
at java.util.jar.Manifest.read(Manifest.java:167)
at java.util.jar.Manifest.<init>(Manifest.java:52)
at sun.tools.jar.Main.run(Main.java:123)
at sun.tools.jar.Main.main(Main.java:903)

是什么原因阿


第22楼 2005-04-11 09:24 我是java 写道:

Re:再议JAR文件


楼上修改文件.mft即可


第23楼 2005-04-11 14:07 drmcer 写道:

Re:再议JAR文件


1. 如果JAR文件双击不能运行, 可以在文件类型里将JAR文件的打开程序指向"Java(TM) 2 Platform Standart Edition Binary"

2. 注意, Manifest文件的内容一定要以一个空行为结尾, 但最起码在文件内容结尾处也得有一个回车. 原因是Manifest文件的最后一行是不会被解析的, 所以不能让文件的最后一行有内容. 关于这个问题java.sun.com在线文档有一句话:
Warning: The text file must end with a new line or carriage return. The last line will not be parsed properly if it does not end with a new line or carriage return.

3. 注意, jar.exe工具的命令行选项开关与参数也是有一些规定的, 比如"jar cvfm AppGraIo.jar AppGraIo.class", 这是一个错误的命令行书写, 所以jar.exe工具会报错, 正确的应该是"jar cvmf Manifest.MF XXX.jar XXX.class ...", 选项开关cvmf不要随便写, cv两个没有顺序限制, 但选项开关mf的顺序必须对应上后边的Manifest.MF与XXX.jar的顺序, 也就是说Manifest.MF在XXX.jar的前边, 那么选项开关就得mf这样写, 如果XXX.jar在Manifest.MF前边, 那选项开关就得fm这样写, 所以mf或者fm这里一定要注意顺序问题, 否则就会报
C:\java>jar cvfm AppGraIo.jar AppGraIo.class
java.io.IOException: invalid header field
at java.util.jar.Attributes.read(Attributes.java:389)
at java.util.jar.Manifest.read(Manifest.java:167)
at java.util.jar.Manifest.<init>(Manifest.java:52)
at sun.tools.jar.Main.run(Main.java:123)
at sun.tools.jar.Main.main(Main.java:903)
这种错误. 大家可以看到这个操作里选项开关正好与文件名参数的顺序相反.
关于这第3个问题, java.sun.com在线文档里有句话说的很明白:
The m and f options must be in the same order as the corresponding arguments.
// 意思是说选项开关m与f的顺序必须要与后边的参数相对应
The c and f options can appear in either order, but there must not be any space between them.
// 意思是选项开关c与f可以以任何顺序出现, 但两者之间不能有空格

以上三点还请大家注意.
<java.sun.com JAR 教程>


第24楼 2005-07-30 11:30 yiqike 写道:

Re:再议JAR文件


为什么我照着做却不行呢?各位大大能不能解释下,谢谢
H:\example\3>jar cfm Tom.jar Mymoon.mf ColorIcon.class ThreePanels.class

H:\example\3>java -jar Tom.jar
Exception in thread "main" java.lang.NoClassDefFoundError: ThreePanels$1
at ThreePanels.<init>(ThreePanels.java:33)
at ColorIcon.main(coloricon.java:42)

H:\example\3>javaw -jar Tom.jar

H:\example\3>java -jar Tom.jar
Exception in thread "main" java.lang.NoClassDefFoundError: ThreePanels$1
at ThreePanels.<init>(ThreePanels.java:33)
at ColorIcon.main(coloricon.java:42)


第25楼 2005-08-02 11:25 sturgeon 写道:

Re:再议JAR文件


不错!


第26楼 2005-10-18 16:20 lcguo 写道:

Re:再议JAR文件


jar有什么用呢,可以说一下它作用吗


第27楼 2005-10-18 19:40 jjjkl81 写道:

Re:再议JAR文件


打包其实可以换一个名称就是压缩,就是把同一个文件夹下的文件压缩成一个.jar文件
作这个东东的一种作用是你可以做一个可运行的.jar文件,作可运行的.jar就必须指明你的.jar文件中的主类是什么,主类的指明就是编写一个manifest格式的文件来指明主类。
还有的另一个用法就是使用用于第三方的扩展类,当你的程序用到第三方的扩展类时,比如用到你曾经编写的一个类,你就可以把以前的类打包成.jar文件,然后引用它,到目前为止我所知道的就是这些!希望对大家用一定的用处!


第28楼 2005-12-01 14:34 lanruijin 写道:

Re:再议JAR文件


谢谢楼主


第29楼 2005-12-06 04:31 handsome112233 写道:

Re:再议JAR文件


怎么我的不行,报错说找不到Mymoon.mf文件?


第30楼 2005-12-10 14:03 studyjava2005 写道:

Re:再议JAR文件


我生成了jar文件!
用java -jar Mymoon.jar也可以执行!但为什么双击鼠标就没反应???


第31楼 2005-12-10 14:05 studyjava2005 写道:

Re:再议JAR文件


我生成了jar文件!
用java -jar Mymoon.jar也可以执行!但为什么双击鼠标就没反应???

老师叫我们弄聊天系统,总不能每次都叫他到doc下去运行吧
他肯定不给我们通过,我觉得 555


第32楼 2005-12-15 12:56 studyjava2005 写道:

Re:再议JAR文件


我用 cvfm 制成.jar文件后(比如 aaa.jar),我用winrar解压打开观看里面的manifest.mf文件 总是
Manifest-Version: 1.0
Created-By: 1.5.0 (Sun Microsystems Inc.)
Main-class: CommunicationServer
这样显示;

而我手动做的manifest.mf文件分明是
Manifest-Version: 1.0
Main-class: CommunicationServer
Created-By: 1.5.0 (Sun Microsystems Inc.)

也就是main-class和create-by老是先后顺序不对,这样造成的后果是
在我的机子上可以运行,到其他的机子上却不一定运行成功(其他的机子已经装了jvm了),不成功的原因是 could not find the main class. program will exit

这是怎么回事啊,为什么会颠倒位置,为什么有些机子能运行,有些又不能?

郁闷至极!!!!!!!!!


第33楼 2005-12-29 08:46 cihun_81 写道:

Re:再议JAR文件


可以省很多事


第34楼 2006-01-04 08:54 lqfjava 写道:

Re:再议JAR文件


请高手指教
编写一连接数据库的类 lqf.class
执行 java lqf
可以运行
但压缩成.jar文件后
用java -jar lqf.jar
却提示找不到驱动
请问怎么回事?
先行谢过!


第35楼 2006-01-05 05:03 狗尾巴草 写道:

Re:再议JAR文件


哦,不错
长知识了呢
不过文件打jar包能不能用winrar?
如果能的话就方便多了来


第36楼 2006-01-07 15:14 xbee 写道:

Re:再议JAR文件


《j2》中关于jar的内容太少了!那位高手给贴点猛料!!!
谢了!!!


第37楼 2006-01-11 12:14 ljcyu 写道:

Re:再议JAR文件


如何把第三方的jar文件打包为一个jar文件来运行,可以参考
one jar方法,
http://www-128.ibm.com/developerworks/cn/java/j-onejar/

还有相应的Eclipse插件
http://fjep.sourceforge.net/#inst


第38楼 2006-01-13 17:14 studyjava2005 写道:

Re:再议JAR文件


种种实验证明:很多时候jvm的版本直接影响.jar文件的可否执行,就比如说:你的jvm是1.5.0版本的,那你在这台机子上制作的jar文件去一台装jvm的版本为1.4.0的机子上没办法双击运行了;而在装的jvm是1.4.0的机子弄的jar文件却可以在更高版本上正常运行(制作的过程中没什么意外的话)。


第39楼 2006-04-22 11:12 abcd841009 写道:

Re:再议JAR文件


为什么要写mf文件呢?有没有不用写的方法啊????而且mf文件为什么要这样写呢???谢谢


第40楼 2007-02-13 15:45 451102995 写道:

Re: 再议JAR文件


我按照你的方法生成JAR文件后....双击运行没有反映..我到命令提示符下使用javaw -jar ABC.jar的时候出现的时候出现一个错误提示框...内容是找不到主类,程序中断,这是为什么呢?以下是我的class文件和mf文件的主要内容
我的class文件名为Logical.class 里面的程序代码是:
public class Logical{ //创建Logical类,并定义为公用
public static void main(String[] args){ //类main方法,main为主函数。功能未明
boolean a=true; //使用boolean定义逻辑型变量a 并赋值为true
boolean b=false; //使用boolean定义逻辑型变量b 并赋值为false
System.out.println(a); //使用System类的out成员变量(对象)的printin方法(屏幕输出)输出a的值
System.out.println(b); //使用System类的out成员变量(对象)的printin方法(屏幕输出)输出b的值
}
}
这是一个我在学习JAVA中的一个例子
mf文件里的内容是:Main-Class: Logical(后面有回车)
我使用生成JAR文件的命令是:jar cfm ABC.jar Mymoon.mf Logical.class
此时我D:\test\下一共有Logical.class、Mymoon.mf、ABC.jar 3个文件
为什么我想要双击运行ABC.jar的时候会提示:...内容是找不到主类,程序中断,这是为什么呢?而且它的提示是英文的其中有提示到main这个类,可是我的class里有main这个类啊...而且我的mf应该也没有写错...究竟是什么问题啊?是我本身的class程序有什么错误...还是本身这个class就不能打包成jar..


第41楼 2007-05-11 18:27 fengyiqui 写道:

Re: 再议JAR文件


老乡,顶一下!


发表新主题   回复此主题