如何在清单文件中指定依赖项,然后将其包含在我的.jar文件中?

时间:2010-04-07 11:52:59

标签: java jar dependencies manifest

我通过以下命令生成.class文件:

javac -cp \directoryName\external.jar myPackageDirectory\First.java myPackageDirectory\Second.java

我需要在编译期间使用-cp和“外部”库(external.jar)的.jar文件名,以便能够从我的代码中使用此库。


使用我的.class文件,我按以下方式生成了我的.jar文件:

jar cfm app.jar manifest.txt myPackageDirectory\*.class

manifest.txt只包含一行:

Main-Class: myPackageName.First

我的问题是我不确定我是否可以在其他计算机上运行我的.jar文件。我想是这样的,因为在编译期间我指定了.jar文件的位置外部图书馆。因此,我的.class文件(包含在.jar文件中将尝试在特定目录中查找外部库的.jar文件,并且不保证外部库的.jar文件将位于同一目录中就像在我的电脑上一样。


我听说上述问题可以通过

来解决
  

使用我的MANIFEST文件   包括在我自己的罐子里,哪个会   列出依赖关系位置

但我不明白它是如何运作的。我需要在编译阶段指定“external.jar”的位置(否则编译器会抱怨)。

2 个答案:

答案 0 :(得分:2)

首先:你似乎没有编译一个名为MainClass的类,你的所有.java文件似乎都在一个包中,所以我假设MainClass只是一个占位符而你实际上在这里使用正确的类名。

您需要specify a Class-Path header将您的外部.jar提到您的manifest.txt并将.jar文件与您的jar一起发送。您需要另外执行此操作以在编译时指定-cp

答案 1 :(得分:0)

除了Joachim Sauer(非常正确)所说的,还有一种方法可以将您的依赖jar包装到与您自己的代码相同的jar中。完成此操作的程序创建一个超级主类并操纵类路径以在生成的jar中查找相关的jar。

有几个程序可以做到这一点;其中一个被称为OneJar