我在 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 ?