Java 编译正常,但运行时出现NoClassDefFoundError

Java 编译正常,但运行时出现NoClassDefFoundError,java,Java,我正在尝试使用JavaMail API发送电子邮件。 我将JDK1.5从自解压二进制文件安装到我的主目录中。我在Ubintu 9.10上 我使用下一个命令编译程序: ~/jdk1.5.0_22/bin/javac-classpath~/jdk1.5.0_22/jre/lib/javamail-1.4.3/mail.jar:~/jdk1.5.0_22/jre/lib/jaf-1.1.1/activation.jar hw.java 它编译得很好。如您所见,我已经指定了mail.jar和activa

我正在尝试使用JavaMail API发送电子邮件。 我将JDK1.5从自解压二进制文件安装到我的主目录中。我在Ubintu 9.10上

我使用下一个命令编译程序:

~/jdk1.5.0_22/bin/javac-classpath~/jdk1.5.0_22/jre/lib/javamail-1.4.3/mail.jar:~/jdk1.5.0_22/jre/lib/jaf-1.1.1/activation.jar hw.java

它编译得很好。如您所见,我已经指定了mail.jar和activation.jar的路径 现在,我尝试使用下一个命令运行应用程序:

~/jdk1.5.0_22/bin/java-classpath~/jdk1.5.0_22/jre/lib/jaf-1.1.1/activation.jar:~/jdk1.5.0_22/jre/lib/javamail-1.4.3/mail.jar:。HelloWorldApp

我得到一个异常java.lang.NoClassDefFoundError:javax/mail/Address

为什么它在编译时能找到类,而在运行时却不能找到类? 如何正确运行我的应用程序


提前感谢

该类应该来自您的
mail.jar
。我不确定你的类路径是否被正确解析。tilde(~)是一个shell函数,在发送到Java进程之前需要进行扩展。您是否尝试过删除~并替换为
/home/{whatever}
?我想这就是问题所在。

这个类来自mail.jar,而不是activationies,你是对的。我换了~,效果很好。尽管使用~I~编译的结果还可以,但我注意到您的类路径在编译和运行场景之间是反向的。不确定这是否有区别…没有区别。只是它抱怨activation.jar中的某个类而不是mail.jar中的某个类