【问题标题】:Not able to run the jar file - NoClassDefFoundError无法运行 jar 文件 - NoClassDefFoundError
【发布时间】:2013-11-13 07:08:34
【问题描述】:

我有一个名为“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 运行。

【问题讨论】:

  • 请分享您用于运行 jar 文件的命令。
  • 我贴了,请查收

标签: java


【解决方案1】:

NoClassDefFoundError 通常表示列出的类已找到,但由于找不到它的某些依赖项而无法加载。

我会指出您的清单文件中的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

【讨论】:

  • 你的意思是说(相对路径),我应该将依赖的jar文件复制到与主jar文件存在的同一目录下?
【解决方案2】:

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

java -jar TJXLineFilterPlugin.jar

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

【讨论】:

    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多