web-dev-qa-db-fra.com

java.lang.NoClassDefFoundError: cas de test com/Sun/mail/util/MailLogger for JUnit pour le courrier Java

J'utilise l'API Java Mail pour lire et analyser les emails. Cela fonctionne très bien avec le code Servlet.

Maintenant, j'essaie d'écrire un scénario de test JUnit dans le même but. Mais en ligne Session session = Session.getDefaultInstance(properties);, je reçois l'exception suivante:

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

Quelqu'un peut-il me dire où je me trompe?.

97
user2215139

com.Sun.mail.util.MailLogger fait partie de JavaMail API. Il est déjà inclus dans l'environnement EE (c'est pourquoi vous pouvez l'utiliser sur votre serveur live), mais il n'est pas inclus dans l'environnement SE.

Documents Oracle

L'API JavaMail est disponible en tant que package facultatif à utiliser avec Java SE et est également inclus dans la plate-forme Java EE.

99% que vous exécutez vos tests dans l'environnement SE, ce qui signifie que vous devez vous soucier de l'ajouter manuellement à votre chemin de classe lors de l'exécution des tests.

Si vous utilisez maven, ajoutez la dépendance suivante (vous voudrez peut-être changer de version):

<dependency>
    <groupId>com.Sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.0</version>
</dependency>
81
Eugene Loy

L'artefact javax.mail-api n'est utile que pour la compilation. En réalité, vous devez exécuter du code. Vous avez donc besoin d’une implémentation complète de JavaMail. Utilisation:

<groupId>com.Sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.5</version>

Le numéro de version sera probablement différent: https://mvnrepository.com/artifact/com.Sun.mail/javax.mail

122
Bill Shannon

J'utilise les dépendances maven suivantes pour faire fonctionner le courrier Java. Le premier inclut l'API javax.mail (sans implémentation) et le second est l'implémentation Sun de l'API javax.mail.

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>javax.mail-api</artifactId>
    <version>1.5.5</version>
</dependency>
<dependency>
    <groupId>com.Sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.5.5</version>
</dependency>
46
Shane Rowatt

Téléchargez ce fichier JAR et ajoutez-le à vos bibliothèques: http://Java.net/projects/javamail/downloads/download/javax.mail.jar

4
Joaquin Iurchuk

Veuillez consulter http://mvnrepository.com/artifact/javax.mail/mail/ , vous pouvez télécharger jar ou utiliser la dépendance maven, en fonction du type de votre projet. Cela devrait couvrir le problème et vous n’obtiendrez pas d’exception NoClassDefFoundError.

3
Gaurav B

Cela se produit également si votre code attend Java Mail 1.4 et que vos fichiers JAR sont Java Mail 1.3. M'est arrivé quand j'ai mis à jour la bouilloire Pentaho

Cordialement

1

Vraiment c'est intéressant. Vous devez simplement utiliser javax-mail.jar de "com.Sun" et non "javax.mail".
dwonload com.Sun mail jar

0
Resul Rzaeeff