线程“main”中的异常java.lang.NoClassDefFoundError:Linux中的javapasswords

时间:2013-05-10 11:36:56

标签: java compiler-errors runtime javac

我有这样的代码,

import javapasswordsdk.PSDKPassword;
import javapasswordsdk.PSDKPasswordRequest;
import javapasswordsdk.exceptions.PSDKException;

etc.............

我收到以下错误,它正在接受javapasswordsdk.PSDKPassword; javapasswordsdk.PSDKPasswordRequest但不接受javapasswordsdk.exceptions.PSDKException

所有这些类都在一个jar文件中。我的问题是为什么它为什么不能解决它。

请尽快澄清。

 Exception in thread "main" java.lang.NoClassDefFoundError:javapasswordsdk/exceptions/PSDKException
    at beans.MigrateData.main(Unknown Source)
 Caused by: java.lang.ClassNotFoundException: javapasswordsdk.exceptions.PSDKException
    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)
    ... 1 more

3 个答案:

答案 0 :(得分:1)

我的猜测是你的beans.MigrateData类在一个jar文件中,而javapasswordsdk类在另一个jar文件中。所以你可能想要:

java -cp beans.jar:javapasswordsdk.jar beans.MigrateData

(或类似的东西)。

基本上,您需要确保javapasswordsdk类在执行时位于类路径上。我们真的不知道你是如何运行你的代码或它是如何打包的,所以上面只是一个猜测 - 但你应该能够适当地调整它。

编辑:现在我们可以看到你是如何运行它的,问题是你在类路径中使用了错误的分隔符。在Unix上,您使用:而不是;来分隔条目:

Windows: java -cp jar1;jar2;jar3
Unix:    java -cp jar1:jar2:jar3

答案 1 :(得分:0)

确保所有必需的jar都在ClassPath中:因为NoClassDefFoundError

  

如果Java虚拟机或ClassLoader实例尝试加载类的定义(作为普通方法调用的一部分或作为使用新表达式创建新实例的一部分),则抛出该类,并且没有类的定义可以被发现。

答案 2 :(得分:0)

消息很明确:在类路径中找不到javapasswordsdk.exceptions.PSDKException;

因此,似乎该类不在您认为它所在的jar中,或者该jar未正确添加到类路径中。