【问题标题】:java.lang.NoClassDefFoundError: Could not initialize class org.springframework.mail.javamail.SmartMimeMessagejava.lang.NoClassDefFoundError:无法初始化类 org.springframework.mail.javamail.SmartMimeMessage
【发布时间】:2020-09-27 17:21:46
【问题描述】:

我在从 Java Web 项目发送电子邮件时遇到以下错误。
IDE:eclipse
Java 版本:openjdk 版本“1.8.0_212-3-redhat”
春季版: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 项目
  • 在项目资源管理器和文件系统中检查spring-context-support-5.1.6.RELEASE.jar 中的org.springframework.mail.javamail.SmartMimeMessage

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

【问题讨论】:

  • 你能发布你的 pom.xml 吗?你在哪里部署你的战争?你是如何运行它的?
  • 我在 Eclipse 的 Tomcat 服务器上部署战争。
  • 你对Tomcat使用相同的jdk吗?你检查过这个罐子是否在你的最后一场战争中?

标签: eclipse maven spring-mvc mail-sender


【解决方案1】:

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

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

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

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

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

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

<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 如果您使用选项运行 maven 强制更新快照/版本

【讨论】:

    猜你喜欢
    • 2012-10-10
    • 2013-08-08
    • 2012-08-26
    • 2015-10-29
    • 2017-09-12
    • 2016-07-07
    • 2018-08-01
    • 2010-12-29
    相关资源
    最近更新 更多