我已经找到了合并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时被加载到类路径中。
答案 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)或其他构建工具。