【发布时间】:2016-10-04 21:20:23
【问题描述】:
我已经找到了合并 jar 文件的不同描述,例如 Fat-jar。
但是我寻找了一个更简单的解决方案,如下例所示。
jar -cmvf ../manifest.m f MyJar.jar lib/*.jar
也许有人知道将两个或多个 jar 合并为一个的正确语法?
已合并,但文件无法执行。
将类添加到 JAR 文件的类路径
您可能需要从一个 JAR 文件中引用其他 JAR 文件中的类。
例如,在典型情况下,一个小程序被捆绑在一个 JAR 文件中,其清单引用了一个不同的 JAR 文件(或几个不同的 JAR 文件),该文件用作该小程序的实用程序。
您指定要包含在小程序或应用程序清单文件的 Class-Path 标头字段中的类。 Class-Path 标头采用以下形式:
Class-Path: jar1-name jar2-name directory-name/jar3-name
通过在清单中使用 Class-Path 标头,您可以避免在调用 Java 来运行应用程序时必须指定 long -classpath 标志。 注意:Class-Path 标头指向本地网络上的类或 JAR 文件,而不是 JAR 文件中的 JAR 文件或可通过 Internet 协议访问的类。要将 JAR 文件中的 JAR 文件中的类加载到类路径中,您必须编写自定义代码来加载这些类。例如,如果 MyJar.jar 包含另一个名为 MyUtils.jar 的 JAR 文件,则不能使用 MyJar.jar 清单中的 Class-Path 标头将 MyUtils.jar 中的类加载到类路径中。 一个例子
我们希望将 MyUtils.jar 中的类加载到类路径中,以便在 MyJar.jar 中使用。这两个 JAR 文件在同一个目录中。
我们首先创建一个名为 Manifest.txt 的文本文件,其内容如下:
Class-Path: MyUtils.jar
警告:文本文件必须以换行符或回车符结尾。如果最后一行没有以换行符或回车符结尾,则无法正确解析。
然后我们通过输入以下命令创建一个名为 MyJar.jar 的 JAR 文件:
jar cfm MyJar.jar Manifest.txt MyPackage/*.class
这会创建一个包含以下内容的清单的 JAR 文件:
Manifest-Version: 1.0
Class-Path: MyUtils.jar
Created-By: 1.7.0_06 (Oracle Corporation)
当您运行 MyJar.jar 时,MyUtils.jar 中的类现在会加载到类路径中。
【问题讨论】:
-
为什么还要费心尝试合并罐子?这将为您带来什么?为什么不只是确保两个单独的 jar 文件都可以使用?
-
我尝试合并它,因为我不关心包含库的文件夹,它必须与主 jar 位于同一文件夹中。谢谢