Caused by: java.lang.NoClassDefFoundError: Could not initialize class cn.hutool.crypto.GlobalBouncyC

这个bug卡了好几天了,看似很简单的问题,无奈经验不足,只好寻求百度帮助了。

搜出来,造成这种的原因很多种,具体还是要看代码了。、

BouncyCastle就是一个提供了很多哈希算法和加密算法的第三方库。

因为引擎了hutool这个库,所以在库代码中看到:如果用户未引入bouncycastle库,则此方法抛出

 然后尝试引入bouncycastle库,尝试通过maven引入,未果。

 考虑是bouncycastle库版本不对吗?

然后继续百度,找到了官网

bouncycastle.orgHome of the Legion of the Bouncy Castle and their Java cryptography resources and open source codehttps://www.bouncycastle.org/latest_releases.html根据搜索得到这个jar包bcprov-jdk18on-xxx.jar貌似是正确的,下载试试吧。

 果然好多版本,但是点击下载告诉我失败。

我又在想能从maven下载jdk1.8的吗??

https://mvnrepository.com/search?q=bcprov-jdk18on-xxx.jar

 然后,选择第三个,

<!-- https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk18on -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk18on</artifactId>
    <version>1.72</version>
</dependency>

在idea 的maven里引入这个。看看lib里已经进来的。调试代码看看。

然而并没有毛用,应该是各种版本之间的冲突。

2.根据代码给我的人,下来琢磨着把jdk降下来

结果,jdk版本从1.8.2降低到1.8.0没毛用。

下来先解决淘宝的sdk的问题吧,先下载到本地,然后安装到maven

mvn install:install-file -Dfile=C:\taobao-sdk-java-auto-0.0.1.jar -DgroupId=com.dingtalk.open -DartifactId=taobao-sdk-java-auto -Dversion=0.0.1 -Dpackaging=jar

mvn install:install-file -Dfile=C:\druid-1.2.6.jar -DgroupId=com.alibaba -DartifactId=druid-spring-boot-starter -Dversion=1.2.6 -Dpackaging=jar

建模块时报错: 

The POM for com.alibaba:druid:jar:1.2.6 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details

打开调试日志

mvn clean compile -U -X


好吧,调试日志先不看了,已经找到解决办法了。

也最后终于找到问题的原因了,就是库冲突。但是maven不报错,还是在idea里解决的冲突

如下图:

 只需要把红色的冲突排除掉就可以了。

总结一下,碰到冲突需要看两个地方。

### Java程序中 `java.lang.NoClassDefFoundError` 错误分析 #### 问题描述 当运行Java应用程序时,可能会遇到类似于以下错误的信息: ``` java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager ``` 此错误通常表明在尝试加载或初始化 `sun.awt.X11FontManager` 类时发生了异常。该类主要用于处理基于X Window系统的字体管理,在某些环境中可能由于缺少依赖项或其他配置问题而无法正常工作。 --- #### 原因分析 此类问题的主要原因可以归纳为以下几个方面: 1. **环境缺失必要的库文件** 如果操作系统未提供完整的图形支持库(如 X11 或 GLIBC),则可能导致 `sun.awt.X11FontManager` 初始化失败[^5]。 2. **无头模式(Headless Mode)未启用** 当应用程序部署到不支持GUI的服务器(例如Linux服务器)时,如果没有显式设置 `-Djava.awt.headless=true` 参数,则会触发与 GUI 组件相关的错误[^3]。 3. **JVM版本兼容性问题** 不同版本的 JVM 对于特定平台的支持可能存在差异。如果使用的 JDK 版本较旧或者针对的目标平台不适配,也可能引发类似的错误。 4. **容器化环境下缺乏必要组件** 在 Docker 容器等轻量级环境中,基础镜像可能默认裁剪掉了部分系统库(如GLIBC)。这同样会导致 `NoClassDefFoundError` 的发生。 --- #### 解决方案 ##### 方法一:启用 Headless 模式 通过设置 JVM 启动参数来激活 headless mode 可有效规避大多数与 AWT/Swing 相关的问题。具体操作如下所示: ```properties -Djava.awt.headless=true ``` 对于 Spring Boot 应用而言,可以在启动入口处手动设定属性值: ```java public static void main(String[] args) { System.setProperty("java.awt.headless", "true"); SpringApplication.run(Application.class, args); } ``` 这种方法适用于绝大多数场景下的报表生成工具(如 EasyExcel)导出任务。 ##### 方法二:调整 Tomcat 配置 如果是 Web 应用项目并采用 Apache Tomcat 作为应用服务器的话,可以通过修改 catalina.sh 文件加入额外选项完成相同效果: ```bash exec "$_RUNJAVA" $JAVA_OPTS \ -Djava.awt.headless=true \ ... ``` 上述改动需确保每台目标机器上的 tomcat/bin/catalina.sh 脚本均被更新一致[^4]。 ##### 方法三:补充缺失的基础库 当确认当前运行环境确实存在底层依赖不足的情况时,可通过安装相应的软件包解决问题。以下是 Alpine Linux 下的一个实例脚本片段用于演示如何添加所需资源: ```bash # 添加 glibc 支持 apk --no-cache add libstdc++ wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-2.30-r0.apk wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-bin-2.30-r0.apk wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-i18n-2.30-r0.apk apk add glibc-2.30-r0.apk && apk add glibc-bin-2.30-r0.apk && apk add glibc-i18n-2.30-r0.apk ``` 注意替换最新稳定版号以适应实际需求[^5]。 ##### 方法四:升级至更高版本 JDK/JRE 考虑到 Oracle 已逐步停止维护早期发布的 OpenJDK 构建物,建议切换到更现代且受长期支持的服务提供商那里获取官方认证过的发行件。这样不仅可以获得更好的性能表现还能减少潜在的安全隐患风险。 --- ### 总结 综上所述,面对由 `sun.awt.X11FontManager` 初始失败所引起的 NoClassDefFoundError ,推荐优先考虑引入 headless 运行方式;其次再审视物理机或是虚拟化层面上是否存在遗漏的关键要素待补全最后才去思考迁移框架本身的可能性。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CDialog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值