2015-09-25 7 views
0

Я работаю над функцией, в которой задание 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.

Почему это происходит, и как я могу убедиться, что загружаю правильный класс во всех сценариях?

+1

Похоже, у вас есть несколько версий JavaMail в вашем пути к классам. Один из них - Javamail 1.4.5 или старше, а другой - JavaMail 1.4.6 или новее. – jmehrens

+0

@jmehrens Вы правы, мой котик использовал более старую версию. Однако я попытался использовать ту же самую версию, и все еще была проблема. Проверьте мой ответ. – yannicuLar

+0

Есть ли сообщение об ошибке? – jmehrens

ответ

0

Прослеживая ошибку, я узнал, что другая версия javax.mail была загружена с tomcat/ext/lib и переопределяла мой, когда сервер работал, и поток был инициирован в контексте сервера.

Наконец, мне удалось справиться с этой проблемой, изменив мой javax.mail-апи зависимость от

 <dependency> 
      <groupId>javax.mail</groupId> 
      <artifactId>javax.mail-api</artifactId> 
      <version>1.5.4</version> 
     </dependency> 

в

<dependency> 
     <groupId>javax.mail</groupId> 
     <artifactId>javax.mail-api</artifactId> 
     <version>1.4.4</version> 
     <scope>provided</scope> 
    </dependency> 

я перешел на более старую версию javax.mail-апи , совместимый с сервером, и я также использую библиотеку, которая предоставляется во время выполнения