如何完善 Native Image 下的 SPI 问题?

2021-08-29 00:38:11 +08:00
 ccde8259
问题起源于一个基于 Quarkus 框架的 Demo 应用里。由于需要对内容做一个 SHA256withECDSA 的签名,引入了 bouncycastle 依赖。
在 dev 模式下用 JVM 跑就没出过事,但是打 Native Image 跑签名的时候直接提示 ClassNotFound 。进一步 DEBUG 发现,BouncyCastleProvider 使用了 SPI 的机制加载签名类,而 GraalVM 把 ClassLoader 给干碎了……
有没有遇到类似问题的大佬?求科普这类问题的解决方案……
1572 次点击
所在节点    Java
2 条回复
ccde8259
2021-08-29 12:55:12 +08:00
自问自答一下:
引入配置
quarkus.native.additional-build-args=-H:ReflectionConfigurationFiles=reflection-config.json
在 resources 目录下创建 reflection-config.json 文件,内容如下:
[
{
"name": "org.bouncycastle.jce.provider.asymmetric.ec.Signature$ecDSA256",
"allDeclaredConstructors" : true,
"allPublicConstructors" : true,
"allDeclaredMethods" : true,
"allPublicMethods" : true,
"allDeclaredFields" : true,
"allPublicFields" : true
}
]
大意就是额外增加反射配置……
yazinnnn
2021-08-29 20:29:05 +08:00
io.quarkus.runtime.annotations.RegisterForReflection

这个注解有效不?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/798579

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX