在将应用程序进行打包时,使用者一定希望仅提供给其一个单独的文件,而不是一个含有大量类文件的目录,Java 归档(JAR)文件就是为此目的而设计的。一个JAR文件既可以包含类文件,也可以包含诸如图像和声音这些其他类型的文件。JAR 文件使用 ZIP 压缩格式。
创建 JAR 文件
可以使用 jar
命令来制作 JAR 文件:
$ jar cvf CalculatorClasses.jar *.class icon.gif
上述命令将会制作一个名为 CalculatorClasses.jar
的 JAR 文件
jar 的命令:
- c 创建新档案
- t 列出档案目录
- x 从档案中提取指定的 (或所有) 文件
- u 更新现有档案
- v 在标准输出中生成详细输出
- f 指定档案文件名
- m 包含指定清单文件中的清单信息
- n 创建新档案后执行 Pack200 规范化
- e 为捆绑到可执行 jar 文件的独立应用程序指定应用程序入口点
- 0 仅存储; 不使用任何 ZIP 压缩
- P 保留文件名中的前导 ‘/‘ (绝对路径) 和 “..” (父目录) 组件
- M 不创建条目的清单文件
- i 为指定的 jar 文件生成索引信息
- C 更改为指定的目录并包含以下文件
清单文件
清单文件(manifest)是 JAR 文件中用于描述归档特征的文件。一般被命名为:MANIFEST.MF
,位于 META-INF 子目录中。
你可以在制作 JAR 包的时候使用m
,加上清单文件: ``` jar cmf MyArchrive.jar manifest.mf com/mycompany/mypkg/*.class
> 这里的 `manifest.mf` 命名没有强制要求。但是,最好是能知名晓意。
修改一个 JAR 的清单文件:
jar cmf MyArchive.jar manifest-additions.mf
> 与上述一样,这里的命名也没有强制要求。
### 执行 JAR 文件
执行 JAR 文件之前,需要指定指定程序的入口点:
- 使用 jar 创建 JAR 文件时,使用 `e` 来指定入口文件
- 在 `MANIFEST.MF` 文件中使用 `Main-Class:` 来指定入口文件,需要注意的是,并不需要加上 `.java` 后缀。
执行 JAR 文件:
java -jar Myprogram.jar
### 密封
可以将 JAR 包进行密封,以防止其他类进行干扰。<br />在清单文件中指定密封即可:
Sealed : true
还可以对指定的包进行密封:
Name: com/mycompany/util/ Sealed: true
Name: com/mycompany/misc/ Seled: false
```