我正在研究一个功能,其中Cron作业将通过javax.mail触发连接,并扫描某个IMAP帐户的所有传入邮件。与WebApp运行时相比,jUnit加载另一个类
它是使用JSF-2和Maven构建的Liferay Portlet的一部分,并部署在Tomcat服务器上。
我已经构建了一个jUnit测试,可以成功执行这个场景,运行完全相同的函数,它将从Cron作业调用。我通过执行maven build package
目标执行了此测试,并且我的Maven与我的Tomcat使用相同的JVM。
但在服务器部署在WebApp和克龙触发踢后,我得到这个错误:
org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger]
at org.quartz.core.JobRunShell.run(JobRunShell.java:224)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
Caused by: java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger
at javax.mail.Session.initLogger(Session.java:226)
at javax.mail.Session.<init>(Session.java:210)
at javax.mail.Session.getDefaultInstance(Session.java:321)
at javax.mail.Session.getDefaultInstance(Session.java:361)
所以我想这下Tomcat的运行系统或Servlet上下文或石英流动或什么,与jUnit的分辨率相比,com/sun/mail/util/MailLogger
的分辨率不同。
为什么会发生这种情况,以及如何确保我在所有情况下都加载了正确的类?
看起来您在类路径中有多个版本的JavaMail。一个是Javamail 1.4.5或更高版本,另一个是JavaMail 1.4.6或更高版本。 – jmehrens
@jmehrens你说得对,我的tomcat使用的是旧版本。不过,我尝试使用完全相同的版本,并且仍然存在问题。检查我的答案更多。 – yannicuLar
是否有新的错误信息? – jmehrens