V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ccde8259
V2EX  ›  Java

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

  •  
  •   ccde8259 · 2021-08-29 00:38:11 +08:00 via iPhone · 1581 次点击
    这是一个创建于 1201 天前的主题,其中的信息可能已经有所发展或是发生改变。
    问题起源于一个基于 Quarkus 框架的 Demo 应用里。由于需要对内容做一个 SHA256withECDSA 的签名,引入了 bouncycastle 依赖。
    在 dev 模式下用 JVM 跑就没出过事,但是打 Native Image 跑签名的时候直接提示 ClassNotFound 。进一步 DEBUG 发现,BouncyCastleProvider 使用了 SPI 的机制加载签名类,而 GraalVM 把 ClassLoader 给干碎了……
    有没有遇到类似问题的大佬?求科普这类问题的解决方案……
    2 条回复    2021-08-29 20:29:05 +08:00
    ccde8259
        1
    ccde8259  
    OP
       2021-08-29 12:55:12 +08:00 via iPhone
    自问自答一下:
    引入配置
    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
        2
    yazinnnn  
       2021-08-29 20:29:05 +08:00
    io.quarkus.runtime.annotations.RegisterForReflection

    这个注解有效不?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   860 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:28 · PVG 05:28 · LAX 13:28 · JFK 16:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.