我有一个名为'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
运行。
答案 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将找不到所需的类。