Java Manifest.mf类路径问题

时间:2008-12-01 22:53:47

标签: java variables system classpath manifest.mf

我一直在尝试运行一个jar文件 - 让我们称之为test.jar - 在Unix系统上使用Sybase jconn3.jar。

我创建了一个MANIFEST.MF文件,其中包含以下内容:

Class-Path: $SYBASE/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar

这给出了一个ClassNotFoundError。 $ SYBASE是指向/ opt / sybase13的系统变量;我也尝试了以下内容:

Class-Path: /opt/sybase13/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar

Class-Path: opt/sybase13/jConnect-6_0/classes/jconn3.jar commons-net-1.3.0.jar

但是,如果我将jconn3.jar文件从$ SYBASE / jConnect-6_0 / classes复制到test.jar所在的目录,并将我的MANIFEST.MF更新为如下所示:

Class-Path: jconn3.jar commons-net-1.3.0.jar

应用程序按预期运行。

现在,我已经能够通过在本地复制它来验证jconn3.jar文件的工作原理;我的MANIFEST.MF文件包含我的Main-Class的路径,所以这里没有问题。

您认为可能是什么问题?我一直在看这个东西太久了。 谢谢!

2 个答案:

答案 0 :(得分:12)

类路径中的条目要么是相对于嵌入它们的JAR(你工作过的),要么是URL。要使绝对路径有效,您需要将它们转换为网址,例如

file:/opt/sybase13/...

没有使用变量的机制。

尽管JAR规范没有明确说明,但绝对file:方案URL在class-path属性中起作用。

答案 1 :(得分:0)

环境变量不会被类加载器AFAIK读取。但是,您可以在配置脚本中添加jar

根据规范,条目是jar的亲戚而不是绝对的:

  

Class-Path:

     

此属性的值指定此应用程序或扩展程序所需的扩展或库的相对URL。 URL由一个或多个空格分隔。应用程序或扩展类加载器使用此属性的值来构造其内部搜索路径。

http://java.sun.com/j2se/1.5.0/docs/guide/jar/jar.html #Manifest规范