合并Jar文件?

时间:2016-10-04 21:20:23

标签: java jar merge

我已经找到了合并jar文件的不同描述,比如Fat-jar。

然而,我寻找一个更简单的解决方案,如下例所示。

  

jar -cmvf ../manifest.m   f MyJar.jar lib / * .jar

也许有人知道将两个或更多罐子合并到一个罐子的正确语法?

它已合并,但文件无法执行。

将类添加到JAR文件的类路径

您可能需要在JAR文件中引用其他JAR文件中的类。

例如,在典型的情况下,applet捆绑在一个JAR文件中,该文件的清单引用了一个不同的JAR文件(或几个不同的JAR文件),作为该applet用途的实用程序。

指定要包含在applet或应用程序的清单文件的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)

MyUtils.jar中的类现在在运行MyJar.jar时被加载到类路径中。

1 个答案:

答案 0 :(得分:0)

我不确定你想要合并的是什么,但是假设你的主代码和一些简单的库有一些你的代码,你可以将所有其他jar文件解压缩到同一目录,添加你的类,添加Manifest.mf,其中Main-Class:标题指向您的主类,然后将所有内容拼凑(拉链)。这样你就可以覆盖所有包含的jar文件的清单,也可能覆盖多个jar中具有相同名称的其他文件,但你可以尝试一下。

你得到的是一个可以用

运行的jar文件
java -jar myfile.jar

并且Main-Class标头中定义的类将用作入口点,它必须实现

public static void main(String[] args)

方法

我不推荐这样的解决方案,还有其他方法可以帮助您完成此任务。我知道即使这个解决方案也可以自动化,但你应该看看maven(例如spring-boot:repackage)或其他构建工具。