【问题标题】:NoClassDefFoundError thrown even when required class is present in classpath即使类路径中存在所需的类,也会抛出 NoClassDefFoundError
【发布时间】:2014-02-28 05:39:29
【问题描述】:

尝试运行 jar 程序并获取类未找到错误。

如图,我已经把我所有的依赖jar打包到lib文件夹下,打包到jar文件里面。

lib目录的内容:

在我的 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 在下面的评论更新了我的清单,但仍然收到相同的错误消息。

【问题讨论】:

    标签: java jar


    【解决方案1】:

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

    根据tutorial

    您指定要包含在小程序或应用程序清单文件的 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 文件清单中的类路径中。 (我刚试过,没用。)

    【讨论】:

    • 感谢 Jon,我更新了我的 Class-Path 条目,但仍然遇到同样的错误 no class def found 错误。
    猜你喜欢
    • 1970-01-01
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多