2010-02-15 90 views
6

是否可以创建需要外部依赖项的JAR文件,而不在JAR文件中包含这些依赖项?在不包含外部依赖关系的情况下创建JAR文件

我的google-fu没有给我答案;我找到的所有东西都显示了如何将它们包含在JAR文件中,但不是要在清单文件中放入“我没有它们,查看用户的类路径”的内容。我会假设依赖关系在用户的类路径上正确安装和配置。

就我而言,我的依赖是Apache Commons CLI和Math。


编辑: 在我的JAR文件中,我有Main.class。

我的清单文件看起来像:

Manifest-Version: 1.0 
Created-By: 1.6.0 (Sun Microsystems Inc.) 
Main-Class: Main 

我的CLASSPATH看起来像

.;C:\Program Files\Java\jre1.6.0_06\lib\ext\QTJava.zip;C:\java_lib\commons-cli-1.2.jar;C:\java_lib\commons-math-2.0\commons-math-2.0.jar 

如果我包括在JAR依赖于/lib而行Class-Path: lib/commons-math-2.0.jar lib/commons-cli-1.2.jar添加到清单,然后它工作。

我已经试过在manifest中添加Class-Path: commons-math-2.0.jar commons-cli-1.2.jar而不在JAR中包含文件,只是为了看看这是否可行,但它没有。

回答

3

使用META-INF/MANIFEST.MF中的Class-Path条目来告诉在哪里查找相对于JAR的依赖关系。例如:

Class-Path: servlet.jar ../foo/bar.jar acme/beans.jar 
+0

但我不知道它们在哪里,除了它们存在于用户计算机的类路径中。 – masher 2010-02-15 05:47:38

+0

@masher将所有东西都捆绑在一个zip中,以便控制位置。否则,这不适合你。更好的方法是让用户在这种情况下手动设置他的班级路径。 – 2010-02-15 06:10:27

+0

@masher:如果你不知道它们在哪里,你根本不应该列出它们,但是用户需要将它们放在你的jar旁边的类路径中。 – Fredrik 2010-02-15 06:18:36

3

当然有可能。一种想法是,每次创建jar时,都依赖于jre中的类,并且不需要将它们包含在jar中。 jre会自动在classpath中查找它们。如果找不到,你会看到一个NoClassDefFoundError

+2

+1。就像akf说的那样,只要用户的类路径是正确的,你就不需要做任何事情。将条目放在清单中只是添加到类路径的一种方法。 – 2010-02-15 06:07:37

+0

我可以看到,我不应该做任何事情,只是我无法让它工作!哦,在这个特殊情况下,这只是一个额外的〜130 kB,所以我可以接受在JAR中包含这些库...... – masher 2010-02-15 22:25:37

+0

并且您正在识别类路径中java命令行的依赖关系? – akf 2010-02-15 23:17:00

相关问题