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

问题描述 投票:0回答:2

我尝试在 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)

java netbeans smtp
2个回答
8
投票

对于诸如

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>

0
投票

当使用 spring 父级运行时,对我来说,使用此 Maven 属性设置一致的版本是最简单的:

<properties>
    <jakarta-activation.version>2.0.1</jakarta-activation.version>
</properties>
© www.soinside.com 2019 - 2024. All rights reserved.