Caused by: java.lang.ClassNotFoundException: org.apache.maven.exception.ExceptionHandler 的解决办法

 问题概述

出现这个问题,是由于开发环境迁移,在迁移的过程中操作不规范导致的,

由一台开发服务器,迁移至另外一台开发服务器时,启动失败,

错误提示:“ Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/maven/exception/ExceptionHandler

具体内容如下:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/maven/exception/ExceptionHandler
        at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
        at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3166)
        at java.base/java.lang.Class.getMethodsRecursive(Class.java:3307)
        at java.base/java.lang.Class.getMethod0(Class.java:3293)
        at java.base/java.lang.Class.getMethod(Class.java:2106)
        at org.codehaus.plexus.classworlds.launcher.Launcher.getEnhancedMainMethod(Launcher.java:168)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:261)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:225)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:406)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:347)
Caused by: java.lang.ClassNotFoundException: org.apache.maven.exception.ExceptionHandler
        at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.unsynchronizedLoadClass(ClassRealm.java:271)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:247)
        at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:239)
        ... 10 more
		

 如下图:

解决办法

关于这个问题,是因为 Maven 的lib包损坏导致的,很难找到是那个lib包,

倒腾了很久,解决了这个lib包,又会报下一个lib包异常,

遇到死胡同,蝴蝶效应产生了,


找不完那个lib包,最简单直接的办法:

就是重新安装maven,注意:保存.m2的repository仓库,和maven的settings.xml(因为这里里面可能你很多的私有仓库地址,和账号密钥等)

maven apache 最新版本下载地址:

[官网最新版本下载地址]
优快云 apache-maven-3.9.5-bin windows 64bit x86下载

[apache-maven-3.9.5-bin windows 64bit x86]
 

重新部署maven后,就可以再次顺利的构建项目了,如下图:


好了,关于 Caused by: java.lang.ClassNotFoundException: org.apache.maven.exception.ExceptionHandler 的解决办法  就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者:华    仔
联系作者:who.seek.me@java98k.vip
来        源:优快云 (Chinese Software Developer Network)
原        文:https://blog.youkuaiyun.com/Hello_World_QWP/article/details/134462844
版权声明:本文为博主原创文章,请在转载时务必注明博文出处!
<think>好的,用户在使用JDK21的Quarkus项目里通过Hutool邮件服务遇到了ClassNotFoundException和NoClassDefFoundError的问题,涉及javax.mail.Authenticator和javax.activation.DataHandler。我需要一步步分析原因并给出解决方案。 首先,回忆Java模块化的变化。从JDK9开始,Java EE模块被移出了标准库,改为需要单独添加依赖。常见的如javax.mail和javax.activation这些包,现在属于Jakarta EE的一部分,或者需要额外引入。用户用的是JDK21,所以这些类肯定不在默认的classpath里。 然后,Hutool的邮件服务依赖了JavaMail API,而Quarkus作为Native编译的框架,可能对依赖有更严格的要求。用户可能没有正确添加相关的依赖,或者Quarkus没有自动包含这些依赖的运行时实现。 接下来,解决方案需要分步骤。首先,添加必要的Maven依赖。对于JavaMail API,应该引入jakarta.mail(因为Oracle将javax迁移到Jakarta了),所以可能需要jakarta.mail:jakarta.mail-api和com.sun.mail:jakarta.mail。同时,activation框架(javax.activation)现在可能是jakarta.activation:jakarta.activation-api,但可能还需要运行时的实现,比如org.eclipse.angus:angus-activation。 另外,Quarkus使用Jakarta的依赖,所以需要确认Hutool是否兼容Jakarta命名空间。如果Hutool还在使用javax的包名,可能需要调整依赖或使用适配器。例如,可能需要排除旧的javax.mail依赖,替换为Jakarta的版本。 同时,Quarkus的pom.xml需要包含这些依赖,并且可能需要通过quarkus-maven-plugin处理native构建时的类加载问题。此外,可能需要配置Quarkus的native-image配置,确保在构建时包含这些类。 最后,建议用户检查依赖树,排除冲突的旧版本依赖,确保所有相关的Jakarta依赖版本一致。例如,添加依赖管理部分来统一版本号,避免兼容性问题。 总结步骤:添加Jakarta Mail API和其运行时实现,添加activation框架的依赖,排除旧的javax依赖,配置Quarkus的native构建参数,可能需要在application.properties中注册相关类以供反射使用(如果Quarkus需要的话)。同时,提醒用户测试发送邮件功能,确保依赖正确。</think>在JDK21的Quarkus项目中使用Hutool邮件服务出现`ClassNotFoundException`和`NoClassDefFoundError`的根本原因是Java模块化后移除了JavaEE相关组件,需要手动添加Jakarta Mail API及其依赖。以下是具体解决方案: ### 解决方案分步说明 1. **添加Jakarta Mail依赖** ```xml <!-- API规范 --> <dependency> <groupId>jakarta.mail</groupId> <artifactId>jakarta.mail-api</artifactId> <version>2.0.1</version> </dependency> <!-- 运行时实现 --> <dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail</artifactId> <version>2.0.1</version> </dependency> ``` 2. **补充Java Activation框架** ```xml <dependency> <groupId>jakarta.activation</groupId> <artifactId>jakarta.activation-api</artifactId> <version>2.1.0</version> </dependency> <!-- 激活框架实现 --> <dependency> <groupId>org.eclipse.angus</groupId> <artifactId>angus-activation</artifactId> <version>2.0.0</version> </dependency> ``` 3. **强制排除旧版JAXB依赖**(若存在冲突) ```xml <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.16</version> <exclusions> <exclusion> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> </exclusion> </exclusions> </dependency> ``` 4. **Quarkus原生镜像配置** 在`application.properties`中添加: ```properties quarkus.native.additional-build-args=\ -H:+ReportUnsupportedElementsAtRuntime,\ --initialize-at-build-time=com.sun.mail.jakarta.mail.util.MailLogger ``` ### 原理说明 - JDK9+移除了`javax.mail`和`javax.activation`等JavaEE组件[^1],必须使用Jakarta命名空间的新版本 - Hutool邮件模块底层依赖JavaMail API,但未包含Jakarta适配 - Quarkus原生编译需要明确指定反射访问类 ### 验证步骤 ```java // 测试邮件发送 MailUtil.send("to@domain.com", "测试主题", "邮件内容", false); ``` 若收到邮件且控制台无`ClassNotFoundException`,则说明依赖配置成功。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值