即使classpath中存在必需的类,也会抛出NoClassDefFoundError

时间:2014-02-27 21:21:23

标签: java jar

尝试运行jar程序并找到类找不到错误。

如图所示,我已将所有依赖jar包装在lib文件夹下并将其打包在jar文件中。 enter image description here

lib目录的内容:

enter image description here

在我的manifest.mf文件中,我有

Manifest-Version: 1.0
Class-Path: .\lib\arapi63.jar;.\lib\spring.jar;.\lib\commons-logging.j
 ar;.\lib\log4j.jar;..\conf;.\lib\ojdbc14.jar
Created-By: 1.5.0_12 (Sun Microsystems Inc.)
Main-Class: RemedyRecord

当我尝试使用

运行此jar时
    java -jar remedyDSTX.jar 
    Exception in thread "main" java.lang.NoClassDefFoundError:    
                             com/remedy/arsys/api/ARException

arapi63.jar中没有ARException类,它存在于我的类路径中,所以我不确定为什么这里没有引用...有什么想法吗?

更新

Manifest-Version: 1.0
Class-Path: lib/arapi63.jar;lib/spring.jar;lib/commons-logging.jar;lib
 /log4j.jar;lib/ojdbc14.jar
Created-By: 1.5.0_12 (Sun Microsystems Inc.)
Main-Class: RemedyRecord

我根据Jon的评论更新了我的清单,但仍然收到相同的错误消息。

1 个答案:

答案 0 :(得分:3)

我认为问题在于Class-Path条目的格式。

根据tutorial

  

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

     

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

请注意,这是以空格分隔的,并在目录名和jar文件名之间使用正斜杠

请尝试Class-Path条目:

Class-Path: lib/arapi63.jar lib/spring.jar lib/commons-logging.jar lib/log4j.jar lib/ojdbc14.jar

请注意,我已删除了../conf部分 - 我不相信您可以将目录添加到jar文件清单中的类路径中。 (我刚刚尝试过,但它没有用。)