标签:
我们一般用如下命令来把class文件加入到一个jar中:
jar -cvf test.jar com (将com中的文件打包成一个名叫test.jar文件)
上面的文件不包括MANIFEST.MF
如果自动生成这个文件呢?可以用如下命令:
jar -cvf test.jar MANIFEST.MF com
jar目录下将会生成一个META-INF文件夹,该文件夹下面有一个MANIFEST.MF文件,可以根据相关的属性添加相应的项。
还可以在当前文件夹下面创建一个MANIFEST.MF 文件,将相关的项添加进去如下:
Manifest-Version: 1.0
Created-By: 1.8.0_77 (Sun Microsystems Inc.)
Premain-Class: com.mobile.transformer.MyClass
也可以只加必要的项。例如:
Premain-Class: com.mobile.transformer.MyClass
和上面的效果一样。
Manifest-Version: 1.0
Created-By: 1.8.0_77 (Sun Microsystems Inc.)
这两项会自动生成。
注意每个项的“:”后面要留一个空格,否则在打包的时候会报,最后要加一个空行,否则会少一条数据。
如果“:”后面缺少空格就会打包的时候会出现如下的错误提示:
java.io.IOException: invalid header field
at java.util.jar.Attributes.read(Attributes.java:410)
at java.util.jar.Manifest.read(Manifest.java:199)
at java.util.jar.Manifest.<init>(Manifest.java:69)
at sun.tools.jar.Main.run(Main.java:176)
at sun.tools.jar.Main.main(Main.java:1288)
利用MANIFEST.MF的打包命令如下:
jar cvfm test.jar MANIFEST.MF -C com/ .
当然你也可以查询jar相关的命令:
jar -help
非法选项: h
用法: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files ...
选项:
-c 创建新档案
-t 列出档案目录
-x 从档案中提取指定的 (或所有) 文件
-u 更新现有档案
-v 在标准输出中生成详细输出
-f 指定档案文件名
-m 包含指定清单文件中的清单信息
-n 创建新档案后执行 Pack200 规范化
-e 为捆绑到可执行 jar 文件的独立应用程序
指定应用程序入口点
-0 仅存储; 不使用任何 ZIP 压缩
-P 保留文件名中的前导 ‘/‘ (绝对路径) 和 ".." (父目录) 组件
-M 不创建条目的清单文件
-i 为指定的 jar 文件生成索引信息
-C 更改为指定的目录并包含以下文件
如果任何文件为目录, 则对其进行递归处理。
清单文件名, 档案文件名和入口点名称的指定顺序
与 ‘m‘, ‘f‘ 和 ‘e‘ 标记的指定顺序相同。
示例 1: 将两个类文件归档到一个名为 classes.jar 的档案中:
jar cvf classes.jar Foo.class Bar.class
示例 2: 使用现有的清单文件 ‘mymanifest‘ 并
将 foo/ 目录中的所有文件归档到 ‘classes.jar‘ 中:
jar cvfm classes.jar mymanifest -C foo/ .
标签:
原文地址:http://blog.csdn.net/rznice/article/details/51327485