目录
问题描述
在使用Java Mail测试发送邮件时报错:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger
at javax.mail.Session.initLogger(Session.java:283)
at javax.mail.Session.<init>(Session.java:268)
at javax.mail.Session.getInstance(Session.java:321)
at com.azureip.tmspider.controller.TestController.javaMailTest(TestController.java:161)
at com.azureip.tmspider.controller.TestController.main(TestController.java:72)
Caused by: java.lang.ClassNotFoundException: com.sun.mail.util.MailLogger
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 5 more
问题排查
查看自己的pom.xml配置:
<!-- Java Mail -->
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
最终确定原因为“javax.mail-api-1.6.2.jar”包中不包含类“com.sun.mail.util.MailLogger”。
com.sun.mail.util.MailLogger是JavaMail API的一部分,已经包含在Java EE环境中,但是并未包含在Java SE环境中。对于SE环境来说,Java Mail组件是可选组件。一般我们测试时肯定是在SE环境下进行的,所以会有这样的报错。
参考StackOverflow上的问题:
NoClassDefFoundError: com/sun/mail/util/MailLogger for JUnit test case for Java mail
解决方法
修改pom.xml中JavaMail的依赖配置为:
<!-- Java Mail -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>