1

从 Java Web 项目发送电子邮件时出现以下错误。
IDE:eclipse
Java版本:openjdk版本“1.8.0_212-3-redhat”
Spring版本:5.1.6.RELEASE

java.lang.NoClassDefFoundError: Could not initialize class org.springframework.mail.javamail.SmartMimeMessage
at org.springframework.mail.javamail.JavaMailSenderImpl.createMimeMessage(JavaMailSenderImpl.java:340)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:373)
at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:365)

以下是过滤后的邮件依赖树
在此处输入图像描述


我尝试了以下方法:-

  • Maven 安装
  • 删除了现有的 tomcat 服务器并在 eclipse 中添加了一个新服务器。
  • 更改了 Maven 的本地存储库以下载新的依赖项。
  • 从 Eclipse 工作区中删除项目并删除所有 Eclipse 设置和配置文件/文件夹,然后重新导入现有的 Maven 项目
  • 在at 项目资源管理器以及文件系统中检查org.springframework.mail.javamail.SmartMimeMessagespring-context-support-5.1.6.RELEASE.jar
    在此处输入图像描述

注意:这是一个工作代码,但我现在突然收到此错误。
项目中没有编译错误,战争也能够成功部署在服务器上。

4

1 回答 1

4

以下 jar 之间存在包名和类名冲突:-

  • jakarta.mail-api.jar
  • javax.mail-api.jar

问题原因
两个 jar 都将成为构建的一部分,所有类都将添加到类路径中。
现在类受类加载顺序的支配,导致版本与预期不同。

是什么触发了问题
我已经运行 maven 并强制更新了快照/发布现在以下依赖项
的最新版本已作为内部依赖项。4.10.0jakarta.mail-api.jar

<dependency>
    <groupId>com.google.api-ads</groupId>
    <artifactId>ads-lib</artifactId>
    <version>RELEASE</version>
</dependency> 

解决方案:只使用一个罐子。在可能的情况下javax.mai-api.jar
要更改jakarta.mail-api.jar的内容:我已为in添加了排除项pom.xml

<dependency>
    <groupId>com.google.api-ads</groupId>
    <artifactId>ads-lib</artifactId>
    <version>RELEASE</version>
    <exclusions>
        <exclusion>
            <groupId>jakarta.mail</groupId>
            <artifactId>jakarta.mail-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>

关键学习点:在 pom.xml 中使用 Release/Snapshot 版本可能会导致依赖冲突和问题,例如NoClassDefFoundError,如果您使用选项force update of Snapshots/Releases运行 maven

于 2020-06-10T09:25:16.547 回答