OkHttp3创建RequestBody报错:Could not initialize class okhttp3.internal.Util
解决OkHttp3在Glassfish 5.1中初始化Util类失败的问题
针对你在Glassfish 5.1(JDK 8)环境下使用OkHttp3创建FormBody时出现的java.lang.NoClassDefFoundError: Could not initialize class okhttp3.internal.Util异常,以下是可行的解决方向:
确保依赖完整且版本兼容
OkHttp依赖Okio库,必须保证两者版本匹配:OkHttp 3.x对应Okio 1.x,OkHttp 4.x对应Okio 2.x。同时确认使用的OkHttp版本支持JDK 8(推荐OkHttp 4.10.x及以下版本,5.x系列需JDK 11+)。通过依赖分析工具(如Maven的mvn dependency:tree或Gradle的gradle dependencies)检查是否存在依赖冲突,排除容器自带的冲突类库。调整Glassfish类加载优先级
Glassfish默认会优先加载容器自带的类,可能导致应用的OkHttp库无法正常加载。在项目的WEB-INF/glassfish-web.xml中添加如下配置,让应用优先加载自身的库:<glassfish-web-app> <class-loader delegate="false"/> </glassfish-web-app>注意:此配置可能影响依赖容器类的功能,需完成测试验证。
检查WAR包部署完整性
确认WAR包的WEB-INF/lib目录下包含所有OkHttp相关依赖包(okhttp.jar、okio.jar等),不要将这些依赖放在Glassfish的全局库目录(如domain/lib),避免容器加载不兼容的版本。
内容的提问来源于stack exchange,提问作者WajahatAlvi
相关产品推荐
相关产品推荐

