一、操作零散的单个或几个class文件
jar cvf ibstool.jar com/cn/ibs/TurnD.class com/cn/ibs/TurnB.class
二、把一个文件夹下面的所有class文件打成jar包
jar cvf ibstool.jar * (回车)
生成可执行jar包:
编译的class文件中必须有main入口函数的类方能生成可执行jar包,如:
public static void main(String[] args)
生成的方法步骤:
方法一:
1.用上面的方法把class与相应的结构目录打成jar包
2.解压这个jar包到当前目录
3.编辑META-INF/MANIFEST.MF,给jar包指定程序入口main函数,内容为:
Manifest-Version: 1.0 Created-By: 1.5.0_06 (Sun Microsystems Inc.) Main-Class: MutiThread (回车)
(注意回车与空格,这个文件的内容排版必须标准)
4.再用winzip把这些文件压缩成jar格式包,或者压成zip包,再改后缀名为jar也可。
方法二(推荐):
1. 打成可执行的jar包
cmd操作窗体中进入class文件的根目录,之所以说根目录,是因为下面其下面还可以有很多文件包(夹);
在此目录准备好一个manifest.mf文件,其内容为:
Manifest-Version: 1.0 Created-By: 1.5.0_06 (Sun Microsystems Inc.) Main-Class: MainEntry
main-class为指定所有类的main方法所在的类名.
最后用命令: jar cvfm jarname.jar manifest.mf *
2.测试可执行jar包.
执行命令:
java -jar jarname.jar
3.为可执行jar包制作bat文件.
例如 :
@echo off rem rem Set BQ_IBS_HOME before running this script. rem if not "%BQ_IBS_HOME%" == "" goto CONT0 set BQ_IBS_HOME=c:\ibs :CONT0 @echo on java -DBQ_IBS_HOME=%BQ_IBS_HOME% -jar jarname.jar :END
------------------------------------------------------------------------------------------------
jar包中MANIFEST.MF的写法
对于通常的MANIFEST.MF文件,一般格式是:
Class-Path: lib/a.jar lib/b.jar lib/c.jar lib/d.jar lib/e.jar lib/f.jar
在一行之内将所有的jar包路径写上,空格分隔即可。
但是对于一些大型的项目,因为依赖包众多,比如大于30个,那么如果还写在一行内,就会出现一个长度惊人的行。程序运行倒不会有任何问题,但是对于版本控制就很不友好,如增加或者减少一个依赖包,这行就会被改写。以后对比不同版本时,只能知道这行被修改了确无法直接知道是做了什么修改,必须通过其他方式才能对比出来。
同样的问题发生在code merge(代码整合)时,如果两个分支都修改了这个文件,就必须通过手工来进行merge,而且要对照出来彼此到底改了什么,很困难而且容易出错。
因此一个改进就是将这个文件中的依赖按照一行一个依赖的方式重写,这样以后修改时只会修改改依赖所在的行,很容易就对比出来具体做了哪些感动,code merge时版本控制软件一般也很容易直接自动merge成功。
修改后的文件类似如下:
Class-Path: lib/a.jar lib/b.jar lib/c.jar lib/d.jar lib/e.jar lib/f.jar
但是在实际操作时发生了意料之外的问题,会出现异常或者类无法找到,经检查发现问题出现在MANIFEST.MF的格式上,MANIFEST.MF对于分行和空格是有特殊要求的:
1. 每行的最后一个jar的名称后不容许有空格
即" lib/b.jar"在b.jar后必须回车结束本行,不能有空格,一个都不能
2. 每行的开头必须有不少于2个空格
即" lib/b.jar"在b.jar前必须有不下两个空格
3.最后一行要回车换行,但不能有空格
以上三个条件有一个不满足都会出现问题,有点古怪。
4、严格的MANIFEST.MF格式
在实际的操作中一定要严格的按照格式的要求进行书写,否则给文件将无法使用。