如何在清单文件中指定依赖项,然后将其包含到我的.jar文件中?
我通过以下命令生成.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文件将位于同一目录中就像在我的电脑上一样。
我听说上面的问题可以通过a来解决
我在自己的jar中包含的MANIFEST文件的使用,它将列出依赖项位置
但我不明白它是如何工作的。 我需要在编译阶段指定“external.jar”的位置(否则编译器会抱怨)。
首先:你似乎没有编译一个名为MainClass
的类,并且所有的.java文件似乎都在一个包中,所以我假设MainClass
只是一个占位符,你实际上在这里使用了正确的类名。
您需要指定一个Class-Path
标头 ,将您的外部.jar提取到manifest.txt
,并将.jar文件与jar一起提供。 除了在编译时指定-cp
之外,还需要执行此操作。
除了Joachim Sauer(非常正确地说)之外,还有一种方法可以将您的依赖jar包装到与您自己的代码相同的jar中。 完成此操作的程序创建一个超级主类并操纵类路径以在生成的jar中查找相关的jar。
几个程序可以做到这一点; 其中一个被称为OneJar 。