使用JavaMail时避免NoClassDefFoundError

时间:2018-08-12 10:41:05

标签: java javamail noclassdeffounderror

我一直收到NoClassDefFoundError错误。我正在尝试使用JavaMail API发送电子邮件,但是使用SMTPMessage类创建Message实例时会发生错误。

我知道我需要激活库,但是它仍然无法正常工作。

顺便说一句,我正在使用JDK 10。

此代码的第一行出现错误。

@Override
public void sendEmail(Mail mail) throws MessagingException
{
    Message message = new SMTPMessage(this.session);
    message.setSubject(mail.getHeader());
    message.setFrom(mail.getFrom());
    message.setSentDate(mail.getDateClone());

    if (mail.getSignature() != null)
        message.setText(mail.getText() + "\n\n" + mail.getSignature());

    else
        message.setText(mail.getText());

    Transport.send(message);
}

Stacktrace

Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource
at martin.mail.EmailHandler.sendEmail(EmailHandler.java:79)
at martin.Main.main(Main.java:22)
Caused by: java.lang.ClassNotFoundException: javax.activation.DataSource
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:190)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:499)
... 2 more

2 个答案:

答案 0 :(得分:1)

默认情况下,JDK 9禁止访问许多javax。* API。 您需要添加命令行选项--add-modules java.activation来启用对javax.activation API的访问。

答案 1 :(得分:0)

解决方案

只需将激活库添加到您自己的类路径中即可。您可以将其放在自己的包装中。