在linux中无法运行java来发送邮件。.NoClassDefFoundError javax/mail/Authenticator

0 人关注

我试图在Linux服务器上用Tomcat运行一个简单的java来发送邮件。

我把myClass.java和mail.jar放在一个目录下。

我已经做了。

# javac -cp mail.jar myClass.java

并没有返回错误,但是...

when I try to run it like this:

# java myClass

I get this error:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Authenticator
Caused by: java.lang.ClassNotFoundException: javax.mail.Authenticator
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
Could not find the main class: myClass. Program will exit.

这很奇怪,因为我在Windows上就是这样运行的,而且还能正常工作。我也试着做一个简单的类,里面只有一个System.out,它也能运行。

但我不知道为什么我没有得到Authenticator类,如果我已经检查出它包含在mail.jar中的话。

我使用java 1.6.0_22。

谢谢!^^

1 个评论
替换代码0】并不神奇地包含在你的班级中。(谁给这句话加注??)
java
linux
jar
Ralexrdz
Ralexrdz
发布于 2013-01-30
2 个回答
Alan Krueger
Alan Krueger
发布于 2013-01-30
0 人赞同

你在你的classpath中包含了 mail.jar 来编译它,你也应该在运行类时包含它。

jdb
java -cp .:mail.jar myClass
gerrytan
gerrytan
发布于 2013-01-30
0 人赞同

默认情况下,当你在命令行中使用以下命令运行你的java程序时,如 java MyClass 如果是这样,你正在运行Java SE(标准版)环境。另一个流行的环境是Java EE(企业版)。

你的程序正在抱怨的类(javax.mail.authentication)来自Java EE包,它在你的运行时肯定不存在。

你可以编译你的代码,这一定意味着在你的eclipse构建路径上的某个地方有一个依赖的jar(如果你使用eclipse),你没有包括在你的运行时间上(例如:mail.jar)。

你需要运行你的程序,使依赖性在运行时可用,例如。