Я работаю над функцией, в которой задание Cron запускает соединение через javax.mail и сканирует все входящие письма определенной учетной записи IMAP.jUnit загружает другой класс по сравнению с временем выполнения WebApp
Это часть портлета Liferay, построенного с помощью JSF-2 и Maven и развернутого на сервере Tomcat.
Я построил jUnit Test, который успешно выполнил этот сценарий, выполнив ту же самую функцию, которая будет вызываться из задания Cron. Я сделал этот тест, выполнив цель maven build package
, и мой Maven использует ту же JVM с моим Tomcat.
Но после развертывания WebAPP на сервере и Крон Trigger умирает, я получаю эту ошибку:
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 во время выполнения или контекста сервлета или потока кварца или любой другой , существует другое разрешение com/sun/mail/util/MailLogger
, по сравнению с разрешением jUnit.
Почему это происходит, и как я могу убедиться, что загружаю правильный класс во всех сценариях?
Похоже, у вас есть несколько версий JavaMail в вашем пути к классам. Один из них - Javamail 1.4.5 или старше, а другой - JavaMail 1.4.6 или новее. – jmehrens
@jmehrens Вы правы, мой котик использовал более старую версию. Однако я попытался использовать ту же самую версию, и все еще была проблема. Проверьте мой ответ. – yannicuLar
Есть ли сообщение об ошибке? – jmehrens