Exception: java.lang.NoClassDefFoundError: javax/activation/DataSource when sending mail

Exception: java.lang.NoClassDefFoundError: javax/activation/DataSource when sending mail

我尝试在 NetBeans 上使用 SMTP 发送邮件时收到错误消息:

run: Exception in thread "main" java.lang.NoClassDefFoundError: javax/activation/DataSource at SendMail.createMessage(SendMail.java:45) at SendMail.main(SendMail.java:59) Caused by: java.lang.ClassNotFoundException: javax.activation.DataSource at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 2 more C:\Users\Admin\AppData\Local\NetBeans\Cache.0\executor-snippets\run.xml:111: The following error occurred while executing this line: C:\Users\Admin\AppData\Local\NetBeans\Cache.0\executor-snippets\run.xml:68: Java returned: 1 BUILD FAILED (total time: 0 seconds)

我需要如何修复它?

(我使用 Apache NetBeans IDE 12.0; Java: 15; Java HotSpot(TM) 64 位服务器虚拟机 15+36-156)

对于 类,例如 javax.activation.DataSource,您需要 JavaBeans Activation Framework 的 JAR 文件。

您可以从 Maven Central here 下载 JAR - 单击那里的 jar link。

如果您使用的是 Maven、Gradle 等依赖管理工具,请使用相关配置(也可在同一页面中找到)。 强烈建议使用依赖管理工具,而不是一个一个地下载 JAR 文件。


您还应该考虑用 jakarta 导入替换您的 javax 导入,因为现在是 where these packages are maintained,向前推进。

如果这样做,则需要使用 Jakarta 激活 API,可用 here。例如:

<dependency>
    <groupId>jakarta.activation</groupId>
    <artifactId>jakarta.activation-api</artifactId>
    <version>2.0.1</version>
</dependency>

如果你这样做,你也应该替换 JavaMail 类 - 例如,你可以替换这个:

import javax.mail.Message;

有了这个:

import jakarta.mail.Message;

并使用 Jakarta Mail 资源,例如:

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>jakarta.mail</artifactId>
    <version>2.0.1</version>
</dependency>