0

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

4

2 回答 2

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
于 2013-11-13T07:41:20.820 回答
0

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

java -jar TJXLineFilterPlugin.jar

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

于 2013-11-13T07:17:41.670 回答