发送邮件时出现异常:java.lang.NoClassDefFoundError:javax/activation/DataSource

ngu*_*_vu 5 java netbeans smtp

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

运行:线程“main”中出现异常 java.lang.NoClassDefFoundError:SendMail.createMessage(SendMail.java:45) 处的 javax/activation/DataSource 在 SendMail.main(SendMail.java:59) 处 引起原因:java.lang.ClassNotFoundException: javax.activation.DataSource 在 java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:606) 在 java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168) java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ... 2 个以上 C:\Users\Admin\AppData\Local\NetBeans\Cache\12.0\executor-snippets\run.xml:111:执行此行时发生以下错误:C:\Users\Admin\AppData\Local\NetBeans\Cache\12.0\executor-snippets\run.xml:68: Java 返回: 1 BUILD FAILED (总时间: 0 秒)

我需要如何修复它?

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

and*_*mes 10

对于诸如此类的类,javax.activation.DataSource您需要 JavaBeans 激活框架的 JAR 文件。

您可以从此处的Maven Central 下载 JAR - 单击jar那里的链接。

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


您还应该考虑用导入替换您的javax导入jakarta,因为现在这是维护这些包的地方,继续前进。

如果您这样做,那么您需要使用 Jakarta Activation API(可在此处获取) 。例如:

<dependency>
    <groupId>jakarta.activation</groupId>
    <artifactId>jakarta.activation-api</artifactId>
    <version>2.0.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

如果您这样做,您还应该替换 JavaMail 类 - 例如,您可以替换它:

import javax.mail.Message;
Run Code Online (Sandbox Code Playgroud)

有了这个:

import jakarta.mail.Message;
Run Code Online (Sandbox Code Playgroud)

并使用Jakarta Mail资源,例如:

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>jakarta.mail</artifactId>
    <version>2.0.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)