Java Mail API를 사용하여 이메일을 읽고 구문 분석하고 있습니다. Servlet 코드에서 잘 작동합니다.
이제 동일한 목적으로 JUnit 테스트 케이스를 작성하려고합니다. 그러나 온라인 Session session = Session.getDefaultInstance(properties);
에서 다음 예외가 발생합니다.
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
누구든지 내가 어디로 잘못 가고 있는지 말해 줄 수 있습니까?
답변
com.sun.mail.util.MailLogger
JavaMail API의 일부입니다 . 이미 EE 환경에 포함되어 있지만 (라이브 서버에서 사용할 수있는 이유입니다) SE 환경에는 포함되어 있지 않습니다.
JavaMail API는 Java SE 플랫폼과 함께 사용하기위한 선택적 패키지로 제공되며 Java EE 플랫폼에도 포함되어 있습니다.
SE 환경에서 테스트를 실행하는 99 %는 테스트를 실행할 때 수동으로 클래스 경로에 추가해야하는 것을 의미합니다.
maven을 사용하는 경우 다음 종속성을 추가하십시오 (버전을 변경하고 싶을 수 있습니다).
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.0</version>
</dependency>
답변
javax.mail-api
유물 만 좋은 컴파일 에 대해.
실제로 코드 를 실행 해야 하므로 JavaMail API 의 완전한 구현 이 필요합니다 . 이것을 사용하십시오 :
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
참고 : 버전 번호는 다를 수 있습니다. 여기 에서 최신 버전을 확인 하십시오 .
답변
다음 maven 종속성을 사용하여 Java 메일이 작동하도록합니다. 첫 번째는 javax.mail API (구현 없음)를 포함하고 두 번째는 javax.mail API의 SUN 구현입니다.
<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>
답변
이 JAR을 다운로드하여 라이브러리에 추가하십시오. http://java.net/projects/javamail/downloads/download/javax.mail.jar
답변
http://mvnrepository.com/artifact/javax.mail/mail/을 참조 하십시오 . 프로젝트 유형에 따라 jar를 다운로드하거나 maven 종속성을 사용할 수 있습니다. 그것은 거의 그것을 다루어야하며 NoClassDefFoundError 예외가 발생하지 않을 것입니다.
답변
정말 흥미 롭습니다. “javax.mail”이 아닌 “com.sun”의 javax-mail.jar 만 사용하면됩니다.
dwonload com.sun 메일 항아리
답변
코드가 Java Mail 1.4를 예상하고 jar가 Java Mail 1.3 인 경우에도 발생합니다. Pentaho Kettle을 업그레이드했을 때 나에게 일어난 일
문안 인사