无法运行jar文件 - NoClassDefFoundError

时间:2013-11-13 07:08:34

标签: java

我有一个名为'TJXLineFilterPlugin'的jar文件。 MANIFEST.MF的值是

Manifest-Version: 1.0
Class-Path: c:\stdintjbt\java\lib\ojdbc14.jar c:\stdintjbt\java\lib\commons-lang-2.0.jar c:\stdintjbt\java\lib\jitterbit-plugin-sdk.jar c:\stdintjbt\java\lib\jitterbit-xml-utils.jar .
Created-By: 1.6.0_35 (Sun Microsystems Inc.)
Main-Class: org.jitterbit.plugins.tjx.TJXLineFilterPlugin

试着跑步

java -jar E:\TJXLineFilterPlugin.jar

jar中有一个文件夹结构

org/jitterbit/plugins/tjx/TJXLineFilterPlugin.class

但它会抛出错误,

Exception in thread "main" java.lang.NoClassDefFoundError: org/jitterbit/plugins
/tjx/TJXLineFilterPlugin
Caused by: java.lang.ClassNotFoundException: org.jitterbit.plugins.tjx.TJXLineFi
lterPlugin
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
Could not find the main class: org.jitterbit.plugins.tjx.TJXLineFilterPlugin. Pr
ogram will exit.

我也尝试使用类路径cp运行。

2 个答案:

答案 0 :(得分:1)

NoClassDefFoundError通常表示列出的但无法加载,因为无法找到某些依赖项。

我会指向您的MANIFEST文件中的Class-Path条目:

Class-Path: ... c:\stdintjbt\java\lib\ojdbc14.jar .

首先,你应该使用相对于有问题的JAR(你的JAR)的路径来监听依赖的JAR,而不是像你那样使用绝对路径。

其次,我认为.甚至不应该存在,因为内部JAR类路径与磁盘上的类路径不同,您将当前工作目录添加到具有.的类路径中

<强>更新

Java应用程序通常以以下结构提供/部署:

myapp/
    applauncher (script or executable)
  + conf
  + logs
    lib/
       myapp.jar
       a.jar
       b.jar
       ...

对于此示例,您的Class-Path条目应为:

Class-Path: ojdbc14.jar commons-lang-2.0.jar jitterbit-plugin-sdk.jar jitterbit-xml-utils.jar

答案 1 :(得分:0)

转到包含jar文件的特定目录,然后执行以下命令:

java -jar TJXLineFilterPlugin.jar

特定类的路径在清单中始终是相对的。从不同的目录执行jar将找不到所需的类。

相关问题