常见的 jar
工具用法
功能 | 命令 |
用一个单独的文件创建一个 JAR 文件 | jar cf jar-file input-file... |
用一个目录创建一个 JAR 文件 | jar cf jar-file dir-name |
创建一个未压缩的 JAR 文件 | jar cf0 jar-file dir-name |
更新一个 JAR 文件 | jar uf jar-file input-file... |
查看一个 JAR 文件的内容 | jar tf jar-file |
提取一个 JAR 文件的内容 | jar xf jar-file |
从一个 JAR 文件中提取特定的文件 | jar xf jar-file archived-file... |
运行一个打包为可执行 JAR 文件的应用程序 | java -jar app.jar |
一个 可执行的 jar 文件是一个自包含的 Java 应用程序,它存储在特别配置的JAR 文件中,可以由 JVM 直接执行它而无需事先提取文件或者设置类路径。要运行存储在非可执行的 JAR 中的应用程序,必须将它加入到您的类路径中,并用名字调用应用程序的主类。但是使用可执行的 JAR 文件,我们可以不用提取它或者知道主要入口点就可以运行一个应用程序。可执行 JAR 有助于方便发布和执行 Java 应用程序。
创建一个可执行 JAR 很容易。首先将所有应用程序代码放到一个目录中。假设应用程序中的主类是 com.mycompany.myapp.Sample
。您要创建一个包含应用程序代码的 JAR 文件并标识出主类。为此,在某个位置(不是在应用程序目录中)创建一个名为 manifest
的文件,并在其中加入以下一行:
Main-Class: com.mycompany.myapp.Sample |
然后,像这样创建 JAR 文件:
jar cmf manifest ExecutableJar.jar application-dir |
既然我们已经将自己的应用程序打包到了一个名为 ExecutableJar.jar 的可执行 JAR 中了,那么我们就可以用下面的命令直接从文件启动这个应用程序:
java -jar ExecutableJar.jar |
假设 extension1.jar 和 extension2.jar 是同一个目录中的两个 JAR 文件,extension1.jar 的 manifest 文件包含以下头:
Class-Path: extension2.jar |
这个头表明 extension2.jar 中的类是 extension1.jar 中的类的 扩展类。extension1.jar 中的类可以调用 extension2.jar 中的类,并且不要求 extension2.jar 处在类路径中。
在装载使用扩展机制的 JAR 时,JVM 会高效而自动地将在 Class-Path
头中引用的 JAR 添加到类路径中。不过,扩展 JAR 路径被解释为相对路径,所以一般来说,扩展 JAR 必须存储在引用它的 JAR 所在的同一目录中。
例如,假设类 ExtensionClient
引用了类 ExtensionDemo
,它捆绑在一个名为 ExtensionClient.jar 的 JAR 文件中,而类 ExtensionDemo
则捆绑在 ExtensionDemo.jar 中。为了使 ExtensionDemo.jar 可以成为扩展,必须将 ExtensionDemo.jar 列在 ExtensionClient.jar 的 manifest 的 Class-Path
头中,如下所示:
Manifest-Version: 1.0 Class-Path: ExtensionDemo.jar |
在这个 manifest 中 Class-Path
头的值是没有指定路径的 ExtensionDemo.jar,表明 ExtensionDemo.jar 与 ExtensionClient JAR 文件处在同一目录中。