2016-10-04 43 views
0

我已经发现了合并jar文件的不同描述,如Fat-jar。合并Jar文件?

但是我寻找一个更简单的解决方案,就像下面的例子。

罐子-cmvf ../manifest.m ˚FMyJar.jar LIB * /罐

也许有人知道正确的语法两个或更多瓶合并成一个?

它被合并但文件无法执行。


增加类的JAR文件的类路径

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

例如,在典型的情况下,applet捆绑在JAR文件中,其JAR文件的清单引用了不同的JAR文件(或多个不同的JAR文件),作为该applet的实用工具。

指定要包含在applet或应用程序的清单文件的Class-Path头字段中的类。在类路径头采用以下形式:

Class-Path: jar1-name jar2-name directory-name/jar3-name 

通过在manifest使用Class-Path头,你可以避免调用java运行应用程序时,指定一个长-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文件:

罐子立方英尺MyJar.jar Manifest.txt MyPackage的/ *类

这将创建一个清单与JAR文件以下内容:现在在MyUtils.jar

Manifest-Version: 1.0 
Class-Path: MyUtils.jar 
Created-By: 1.7.0_06 (Oracle Corporation) 

的类加载到类路径当您运行MyJar.jar。


+0

为什么还打算尝试结合罐子?这将为您实现什么?为什么不相反,只要确保可以使用两个单独的jar文件? –

+0

我试图合并它,因为我不关心带库的文件夹,它们必须与主jar文件位于同一个文件夹中。谢谢 –

回答

0

我不知道你想什么合并,但假设有一个主类和几个简单的库你的一些代码,你可以其他所有jar文件解压到同一目录下,添加您的类,添加Manifest.mf与Main-Class:标题指向您的主类,然后jar(zip)一切回来。这样,您就可以覆盖所有包含的jar文件的清单以及可能在多个jar中具有相同名称的其他文件的清单,但您可以尝试一下。

你得到的是一个jar文件,你可以用

java -jar myfile.jar 

运行,并在Main-Class的头文件中定义的类将被用来作为切入点,它必须实现

方法。

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

+0

我不知道应该在Manifest文件中的“classpath”中写什么以及放置图片的位置。但不知何故,我认为有人可以知道正确的语法,如Oracle文档中所述。不过,我会阅读有关Maven插件或其他构建工具。谢谢 –