使用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
相关产品推荐
相关产品推荐

