You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

grpc-netty-shaded 1.65.1构建原生镜像遇ClassNotFoundException求助

gRPC-Netty Shaded 原生镜像构建时BouncyCastleAlpnSslUtils初始化异常问题

环境信息

  • gRPC-Java版本:1.65.1
  • Spring Boot版本:3.3.1
  • Nacos:支持Spring Boot 3.3.1的实验版本
  • 引入依赖:grpc-netty-shaded

问题现象

执行native:compile构建原生镜像时,抛出如下异常:

[ForkJoinPool-2-worker-2] ERROR io.grpc.netty.shaded.io.netty.handler.ssl.BouncyCastleAlpnSslUtils -- Unable to initialize BouncyCastleAlpnSslUtils.
java.lang.ClassNotFoundException: org.bouncycastle.jsse.BCSSLEngine

原因推测

项目中某个类触发了BouncyCastleAlpnSslUtils的调用,该类在静态初始化阶段通过反射尝试获取BCSSLEngine类,但项目本身并未使用该类,因此触发ClassNotFoundException。

排查信息

Nacos中用到的io.grpc.netty.shaded.io.netty相关类

io.grpc.netty.shaded.io.netty.channel.Channel
io.grpc.netty.shaded.io.netty.channel.ChannelHandler
io.grpc.netty.shaded.io.netty.channel.ChannelHandlerContext

io.grpc.netty.shaded.io.netty.handler.ssl.SslContext
io.grpc.netty.shaded.io.netty.handler.ssl.SslContextBuilder
io.grpc.netty.shaded.io.netty.handler.ssl.util.InsecureTrustManagerFactory
io.grpc.netty.shaded.io.netty.handler.ssl.SslProvider
io.grpc.netty.shaded.io.netty.handler.ssl.ClientAuth

io.grpc.netty.shaded.io.netty.handler.codec.ByteToMessageDecoder

io.grpc.netty.shaded.io.netty.buffer.ByteBuf

io.grpc.netty.shaded.io.netty.util.AsciiString

已配置的原生镜像运行时初始化类

<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.util.AbstractReferenceCounted</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.handler.ssl.PemPrivateKey</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.buffer.PooledByteBuf</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.buffer.PooledUnsafeDirectByteBuf</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.buffer.UnpooledHeapByteBuf</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.buffer.ByteBufUtil</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.buffer.PooledByteBufAllocator</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.buffer.UnpooledDirectByteBuf</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.buffer.UnpooledUnsafeDirectByteBuf</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.buffer.PooledSlicedByteBuf</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.buffer.AbstractPooledDerivedByteBuf</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.buffer.UnpooledByteBufAllocator$InstrumentedUnpooledUnsafeDirectByteBuf</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.buffer.AbstractReferenceCountedByteBuf</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.buffer.ByteBufAllocator</buildArg>
<buildArg>--initialize-at-run-time=io.grpc.netty.shaded.io.netty.handler.ssl.PemValue</buildArg>

尝试过的方案及结果

曾尝试添加org.bouncycastle相关依赖解决BCSSLEngine的ClassNotFoundException,但触发了新异常:

[main] ERROR io.grpc.netty.shaded.io.netty.handler.ssl.BouncyCastleAlpnSslUtils -- Unable to initialize BouncyCastleAlpnSslUtils.
java.security.NoSuchProviderException: no such provider: BCJSSE

因此放弃该方案。已确认Nacos并未直接调用BouncyCastleAlpnSslUtils的相关方法,验证了之前的推测。

恳请熟悉gRPC的开发者提供解决方案,感谢!

内容的提问来源于stack exchange,提问作者CN Dioxide

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 04:10:01