关于Reflections无法加载EdEC密钥类的技术求助
问题分析与解决方案
核心原因
java.security.interfaces.EdECPrivateKey 和 java.security.interfaces.EdECPublicKey 是JDK 15及以上版本才引入的EdDSA加密接口,你当前使用的RedHat OpenJDK 11并不包含这些类——它们属于JDK核心类库,而非第三方依赖,所以找不到对应的Maven包。
解决方案
方案1:排除Reflections对目标类的扫描
Reflections在扫描类路径时会尝试解析所有关联类型,包括当前JDK不存在的类。可以通过配置过滤器跳过这两个类的加载:
Reflections reflections = new Reflections( new ConfigurationBuilder() .setUrls(ClasspathHelper.forPackage("com.iontrading")) .filterInputsBy(new FilterBuilder() .excludeClass("java.security.interfaces.EdECPrivateKey") .excludeClass("java.security.interfaces.EdECPublicKey")) );
方案2:缩小Reflections扫描范围
只扫描业务相关的包(如com.iontrading),避免扫描整个JDK类路径,从根源上避免触发对不存在类的解析:
Reflections reflections = new Reflections("com.iontrading");
方案3:升级JDK版本
如果业务允许,将JDK升级到15及以上LTS版本(如JDK 17),JDK核心类库会自带这两个接口,异常会自动消失。
补充说明
该日志为Reflections的WARN级警告,若业务未使用EdDSA加密功能,部分场景下不会影响系统运行,可先验证业务正常性再选择处理方案。
内容的提问来源于stack exchange,提问作者sahil gupta
相关产品推荐
相关产品推荐

