我尝试在 NetBeans 上使用 SMTP 发送邮件时收到错误消息:
运行:线程“main”中出现异常java.lang.NoClassDefFoundError: javax/激活/数据源位于 SendMail.createMessage(SendMail.java:45) 在 SendMail.main(SendMail.java:59) 原因: java.lang.ClassNotFoundException:javax.activation.DataSource at 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 .0 xecutor-snippets un.xml:111: 执行该行时出现以下错误: C:\Users\Admin\AppData\Local\NetBeans\Cache .0 xecutor-snippets un.xml:68: Java 返回:1 BUILD FAILED(总时间:0 秒)
我需要如何修复它?
(我使用 Apache NetBeans IDE 12.0; 爪哇:15; Java HotSpot(TM) 64 位服务器虚拟机 15+36-156)
对于诸如
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>
如果你这样做,你也应该替换 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>
当使用 spring 父级运行时,对我来说,使用此 Maven 属性设置一致的版本是最简单的:
<properties>
<jakarta-activation.version>2.0.1</jakarta-activation.version>
</properties>