Ich verwende die Java Mail-API, um E-Mails zu lesen und zu analysieren. Es funktioniert gut mit Servlet-Code.
Jetzt versuche ich, einen JUnit-Testfall für denselben Zweck zu schreiben. Aber online Session session = Session.getDefaultInstance(properties);
bekomme ich folgende Ausnahme:
java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger
at javax.mail.Session.initLogger(Session.java:227)
at javax.mail.Session.<init>(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
Kann mir jemand sagen, wo ich falsch liege.
<groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId>
.Das
javax.mail-api
Artefakt eignet sich nur zum Kompilieren .Sie müssen tatsächlich laufen Code, so dass Sie eine vollständige benötigen Implementierung von Java Mail API. Benutze das:
HINWEIS: Die Versionsnummer wird wahrscheinlich abweichen. Schauen Sie sich die neueste Version hier .
quelle
java.lang.NoClassDefFoundError: com/sun/mail/util/PropUtil
auchCould not initialize class javax.mail.internet.InternetAddress
Fehler.Ich verwende die folgenden Maven-Abhängigkeiten, um Java Mail zum Laufen zu bringen. Die erste enthält die javax.mail-API (ohne Implementierung) und die zweite ist die SUN-Implementierung der javax.mail-API.
quelle
Laden Sie diese JAR herunter und fügen Sie sie Ihren Bibliotheken hinzu: http://java.net/projects/javamail/downloads/download/javax.mail.jar
quelle
Weitere Informationen finden Sie unter http://mvnrepository.com/artifact/javax.mail/mail/. Je nach Projekttyp können Sie jar herunterladen oder die Maven-Abhängigkeit verwenden. Das sollte es ziemlich genau abdecken und Sie werden keine NoClassDefFoundError-Ausnahme erhalten.
quelle
Wirklich interessant. Sie müssen nur javax-mail.jar von "com.sun" und nicht "javax.mail" verwenden.
dwonload com.sun mail jar
quelle
Dies passiert auch, wenn Ihr Code Java Mail 1.4 erwartet und Ihre Jars Java Mail 1.3 sind. Ist mir beim Upgrade von Pentaho Kettle passiert
Grüße
quelle