使用 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);

}

堆栈跟踪


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


繁华开满天机
浏览 279回答 2
2回答

HUX布斯

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

慕少森

解决方案只需将激活库添加到您自己的类路径中即可。你可以把它放在你自己的包里。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java