java.lang.NoClassDefFoundError: com / sun / mail / util / MailLogger para el caso de prueba JUnit para correo Java

Estoy usando Java Mail API para leer y analizar correos electrónicos. Está funcionando bien con el código de Servlet.

Ahora estoy tratando de escribir un caso de prueba JUnit para el mismo propósito. Pero en línea Session session = Session.getDefaultInstance(properties); Recibo la siguiente excepción:

 java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger at javax.mail.Session.initLogger(Session.java:227) at javax.mail.Session.(Session.java:212) at javax.mail.Session.getDefaultInstance(Session.java:315) at javax.mail.Session.getDefaultInstance(Session.java:355) at com.vxl.appanalytix.dataload.fromEmail.EmailParser.parseEmailSubject(EmailParser.java:44) at com.vxl.appanalytix.controllers.controllerClasses.GenericEmailServiceClass.readEmailAttachments(GenericEmailServiceClass.java:33) at com.vxl.appanalytix.dataload.GenericEmailTestCase.test(GenericEmailTestCase.java:42) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.ClassNotFoundException: com.sun.mail.util.MailLogger at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) ... 35 more 

¿Alguien puede decirme dónde me estoy equivocando?

com.sun.mail.util.MailLogger es parte de JavaMail API. Ya está incluido en el entorno EE (es por eso que puede usarlo en su servidor directo), pero no está incluido en el entorno SE.

Documentos de Oracle :

La API de JavaMail está disponible como un paquete opcional para usar con la plataforma Java SE y también se incluye en la plataforma Java EE.

99% de que ejecuta sus pruebas en entorno SE, lo que significa que tiene que preocuparse por agregarlo manualmente a su classpath al ejecutar las pruebas.

Si usa maven agregue la siguiente dependencia (es posible que desee cambiar la versión):

  com.sun.mail javax.mail 1.6.0  

El artefacto javax.mail-api solo sirve para comstackr contra. Realmente necesita ejecutar código, por lo que necesita una implementación completa de JavaMail. Utilizar:

 com.sun.mail javax.mail 1.5.5 

El número de versión probablemente sea diferente: https://mvnrepository.com/artifact/com.sun.mail/javax.mail

Uso las siguientes dependencias maven para que funcione el correo java. El primero incluye la API javax.mail (sin implementación) y el segundo es la implementación SUN de la API javax.mail.

  javax.mail javax.mail-api 1.5.5   com.sun.mail javax.mail 1.5.5  

Descargue este JAR y agréguelo a sus bibliotecas: http://java.net/projects/javamail/downloads/download/javax.mail.jar

Consulte http://mvnrepository.com/artifact/javax.mail/mail/ , puede descargar jar o usar la dependencia de maven, según su tipo de proyecto. Eso debería cubrirlo bastante y no obtendrá una excepción NoClassDefFoundError.

Sucede también si su código espera Java Mail 1.4 y sus jar son Java Mail 1.3. Me sucedió cuando actualicé Pentaho Kettle

Saludos

Realmente es interesante. Solo necesita usar javax-mail.jar de “com.sun” no “javax.mail”.
dwonload com.sun mail jar