jar打包

我们一般用如下命令来把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/ .

你可能感兴趣的:(jar打包)