在将应用程序进行打包时,使用者一定希望仅提供给其一个单独的文件,而不是一个含有大量类文件的目录,Java 归档(JAR)文件就是为此目的而设计的。一个JAR文件既可以包含类文件,也可以包含诸如图像和声音这些其他类型的文件。JAR 文件使用 ZIP 压缩格式。

创建 JAR 文件

可以使用 jar 命令来制作 JAR 文件:

  1. $ 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
  1. > 这里的 `manifest.mf` 命名没有强制要求。但是,最好是能知名晓意。
  2. 修改一个 JAR 的清单文件:

jar cmf MyArchive.jar manifest-additions.mf

  1. > 与上述一样,这里的命名也没有强制要求。
  2. ### 执行 JAR 文件
  3. 执行 JAR 文件之前,需要指定指定程序的入口点:
  4. - 使用 jar 创建 JAR 文件时,使用 `e` 来指定入口文件
  5. - `MANIFEST.MF` 文件中使用 `Main-Class:` 来指定入口文件,需要注意的是,并不需要加上 `.java` 后缀。
  6. 执行 JAR 文件:

java -jar Myprogram.jar

  1. ### 密封
  2. 可以将 JAR 包进行密封,以防止其他类进行干扰。<br />在清单文件中指定密封即可:

Sealed : true

  1. 还可以对指定的包进行密封:

Name: com/mycompany/util/ Sealed: true

Name: com/mycompany/misc/ Seled: false

```