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

切换至OpenJDK 17后Log4j SMTPAppender无法找到javax.mail求助

问题分析与解决

核心原因

NoClassDefFoundError: javax/mail/MessagingException 本质是:

  • OpenJDK 17彻底移除了所有Java EE相关模块(包括JavaMail API),而Oracle JDK早期版本自带该模块,或你之前通过ext目录添加依赖的方式在OpenJDK 17中完全失效——Java 9开始就废弃了ext目录机制,改用模块化系统。
  • 你之前的尝试遗漏了JavaMail的依赖包activation.jar,仅添加javax.mail.jar不足以运行。

具体解决方案

1. 补全JavaMail依赖

JavaMail需要两个核心JAR包:

  • javax.mail.jar(核心邮件API)
  • activation.jar(数据处理依赖)

如果用构建工具管理依赖:

Maven

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version> <!-- 适配Java 8~17 -->
</dependency>

Gradle

implementation 'com.sun.mail:javax.mail:1.6.2'

手动管理的话,需同时下载这两个JAR放到项目lib目录。

2. 修复java启动命令

使用-jar参数时,-cp的配置会被JVM忽略,仅读取JAR包Manifest中的Class-Path。正确的启动方式有两种:

方式一:不使用-jar,直接指定主类

java -cp "G:\iMCAlarmParse\lib\javax.mail.jar;G:\iMCAlarmParse\lib\activation.jar;G:\iMCAlarmParse\iMCAlarmParse-dev.jar" -Dlog4j.configurationFile=file:/g:/iMCAlarmParse/conf/log4j2-dev.xml -Dimctoovo.WorkPath=g:/imcAlarmParse/ com.yourpackage.YourMainClass

替换com.yourpackage.YourMainClass为你JAR包中主类的全限定名。

方式二:修改Manifest的Class-Path

在JAR的MANIFEST.MF中添加:

Class-Path: lib/javax.mail.jar lib/activation.jar

确保两个JAR放在JAR包同级的lib目录下,再用java -jar启动。

3. 正确打包可运行JAR

用Eclipse打包"包含所有依赖的可运行JAR"时,需确保**javax.mail.jar和activation.jar的所有类都被合并到最终JAR中**。如果Eclipse工具未自动包含,建议改用Maven的maven-shade-plugin或Gradle的shadowJar插件,这类工具能确保所有依赖被正确打包。

4. 模块化项目额外配置

如果你的项目是Java模块化项目(有module-info.java),需添加:

module your.module.name {
    requires javax.mail; // 对应旧版JavaMail
    // 若用Jakarta Mail则写:requires jakarta.mail;
}

验证点

  • 检查最终运行的类路径中,是否存在javax/mail/MessagingException.class(可通过jar tf your-jar.jar或解压JAR查看)。
  • 确认Log4j版本与JavaMail版本兼容:Log4j 2.17+支持Jakarta Mail(替代javax.mail),若使用Jakarta Mail需对应引入com.sun.mail:jakarta.mail依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:20:15