You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Java 9.0.4发送邮件时遇NoClassDefFoundError错误求助

解决Java 9.0.4中发送邮件时的java.lang.NoClassDefFoundError: javax/activation/DataHandler错误

这个问题我之前在Java 9环境下做邮件功能时也碰到过,核心原因是Java 9引入的模块化系统把原JDK中的Java EE相关模块(包括javax.activation)从默认类路径中移除了——在Java 8及更早版本里,javax.activation是JDK自带的,但Java 9开始将这些模块标记为可选,甚至后续版本直接移出了JDK,所以编译运行时找不到这个类。

下面给你两种场景下的解决方案:

1. 如果你用的是模块化项目(带有module-info.java)

在你的module-info.java文件中,显式声明对java.activation模块的依赖:

module your.module.name {
    requires java.activation;
    // 其他依赖声明...
}

这样编译时JVM就会加载这个可选模块,解决类找不到的问题。

2. 如果你用的是非模块化项目(普通Java项目,用Maven/Gradle管理)

需要手动引入javax.activation的外部依赖包:

Maven项目

在pom.xml中添加以下依赖:

<dependency>
    <groupId>com.sun.activation</groupId>
    <artifactId>javax.activation</artifactId>
    <version>1.2.0</version>
</dependency>

Gradle项目

在build.gradle中添加:

dependencies {
    implementation 'com.sun.activation:javax.activation:1.2.0'
}

如果是手动管理Jar包的话,直接下载javax.activation-1.2.0.jar,添加到项目的类路径(Eclipse中右键项目 → Build Path → Add External Archives)即可。

额外说明

如果你后续升级到Java 11+,java.activation模块会完全从JDK中移除,这时候必须通过外部依赖的方式引入,上面的Maven/Gradle依赖同样适用。

内容的提问来源于stack exchange,提问作者gabboSonc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:49:24