JBOSS java.lang.NoSuchFieldError: TRACE

本文详细记录了解决JBOSS启动时出现java.lang.NoSuchFieldError异常的过程,包括排查commons-logging.jar版本不一致的问题,以及清理环境变量配置、删除额外Jar包等步骤。最终通过彻底清除相关配置解决了问题,强调了网络资源的重要性的同时也指出并非所有解决方案都适用于特定情况。
正常启动JBOSS 发现爆出如下异常
java.lang.NoSuchFieldError: TRACE
at org.jboss.logging.Log4jLoggerPlugin.isTraceEnabled(Log4jLoggerPlugin.java:85)
            at org.jboss.logging.Logger.isTraceEnabled(Logger.java:122)
 
找了很多都是说commons-logging.jar版本不对,也就是项目中的commons-logging跟jboss的不一致
替换,发现还是不行。
因为之前有本地使用axis搭建过webservice,所以在环境变量中有配置了commons-logging-1.0.4.jar
果断删除变量配置。发现还是不能解决问题
想起在配置axis中有往%java_home%\jre\lib\ext 中加入axis1.4的Jar包,里头正好也有commons-logging-1.0.4.jar
全部删除。
重启,搞定。
 
再次证明一个事情,网络上的资源可以很快帮助我们解决问题,但是有时候,不是适合自己的。否则往往会让你最终捶胸顿足。
 
记录开发中的点点滴滴。

转载于:https://www.cnblogs.com/draem0507/archive/2012/09/14/2684526.html

<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`,则说明依赖配置成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值