Webapp 导致 java.lang.ClassNotFoundException:javax.mail.Authenticator

Webapp 导致 java.lang.ClassNotFoundException:javax.mail.Authenticator

我在 ubuntu 上运行了 tomcat6,java 版本是 1.6.0_20。

其中一个Web应用程序导致错误,其根本原因是:

java.lang.ClassNotFoundException:javax.mail.Authenticator

mail.jar 和activation.jar(我在网上研究时发现它们是罪魁祸首)位于/var/lib/tomcat6/common/lib 目录和 webapp 的 lib 目录中。javax.mail.Authenticator.class 位于 mail.jar 中。

我还能尝试什么来让它工作?是否有任何日志可以帮助我找到真正的错误?

更新:

  • 删除了重复的 .jar 文件以避免可能发生的冲突。尝试过
  • 运行 tomcat(在另一台机器上,Windows 上的 tomcat7),并进行详细的类加载:
[Loaded javax.mail.Address from file:/C:/.../build/web/WEB-INF/lib/mail.jar]
[Loaded javax.mail.internet.InternetAddress from file:/C:/.../build/web/WEB-INF/lib/mail.jar]
[Loaded javax.mail.Part from file:/C:/.../build/web/WEB-INF/lib/mail.jar]
[Loaded javax.mail.BodyPart from file:/C:/.../build/web/WEB-INF/lib/mail.jar]
[Loaded javax.mail.internet.MimePart from file:/C:/.../build/web/WEB-INF/lib/mail.jar]
[Loaded javax.mail.internet.MimeBodyPart from file:/C:/.../build/web/WEB-INF/lib/mail.jar]
[Loaded javax.mail.Multipart from file:/C:/.../build/web/WEB-INF/lib/mail.jar]
[Loaded javax.mail.internet.MimeMultipart from file:/C:/.../build/web/WEB-INF/lib/mail.jar]
[Loaded javax.activation.DataSource from C:\Program Files\Java\jdk1.6.0_26\jre\lib\rt.jar]
[Loaded javax.mail.Message from file:/C:/.../build/web/WEB-INF/lib/mail.jar]
[Loaded javax.mail.internet.MimeMessage from file:/C:/.../build/web/WEB-INF/lib/mail.jar]
[Loaded org.apache.naming.factory.MailSessionFactory from file:/C:/Program%20Files/Apache%20Software%20Foundation/Apache%20Tomcat%207.0.11/lib/catalina.jar]
[Loaded org.apache.naming.factory.MailSessionFactory$1 from file:/C:/Program%20Files/Apache%20Software%20Foundation/Apache%20Tomcat%207.0.11/lib/catalina.jar]
28.07.2011 09:24:36 com.sun.faces.lifecycle.LifecycleImpl phase
WARNUNG: executePhase(RENDER_RESPONSE 6,com.sun.faces.context.FacesContextImpl@698b41da) threw exception
javax.faces.FacesException: 
[snip...]
[...]
Caused by: java.lang.ClassNotFoundException: javax.mail.Authenticator
[...]

所以这并没有告诉我任何新的东西。

答案1

您是否使用 Tomcat 提供的邮件会话,或者是否在您的应用程序中创建邮件会话?

请参阅此处了解如何使用 Tomcat 提供的邮件会话:

http://tomcat.apache.org/tomcat-6.0-doc/jndi-resources-howto.html#JavaMail_Sessions

这就是您想要在 Tomcat 中使用 SMTP 连接的方式。

如果您使用 Tomcat 提供的邮件会话,则需要 Tomcat 类路径中的邮件和激活 jar。通常,这是通过将这些 jar 文件放入 tomcat/lib 目录来实现的(如果您从 tomcat.apache.org 下载包)

我猜你遇到的问题是由特殊的 Tomcat Ubuntu 目录配置引起的 - 我不知道哪个目录相当于那里的 tomcat/lib 目录。我通常从 tomcat.apache.org 安装原始发行版,只需将其提取到我的 Ubuntu 机器上的所需目录中即可。

答案2

您是否尝试过在 /etc/environment 上设置 JAVA_HOME 和 CLASSPATH ?

相关内容