使用JDK 8编译Jose4j 0.9.3失败,寻求解决办法
在JDK 8环境下编译并运行Jose4j 0.9.3的解决方案
错误原因
编译时出现的cannot find symbol: class EdECPrivateKey/EdECPublicKey错误,核心原因是:这两个类是Java 11及以上版本才加入java.security.interfaces包的标准类,JDK 8的核心库中并不包含它们。而Jose4j 0.9.3版本默认集成了EdDSA算法支持,依赖这些JDK 11+的特性,导致JDK 8编译失败。
可行解决办法
降级Jose4j版本(推荐)
Jose4j 0.9.0及更早版本完全兼容JDK 8,0.9.1版本开始才引入了依赖JDK 11的EdDSA支持。直接将依赖切换为0.9.0版本,无需修改代码即可在JDK 8环境下正常编译运行。修改0.9.3版本代码移除EdDSA依赖
如果必须使用0.9.3版本,可手动调整代码:- 删除或注释掉
src/main/java/org/jose4j/jws/EdDsaAlgorithm.java文件 - 在
JwsAlgorithmFactory等注册算法的类中,移除EdDsaAlgorithm的注册逻辑 - 编译时确保项目不再引用任何EdEC相关的类和代码
- 删除或注释掉
引入第三方EdDSA兼容库(不推荐)
可以引入BouncyCastle等第三方库实现EdEC接口,然后修改Jose4j代码替换相关类的引用,但这种方式需要大量代码调整,维护成本高,仅适合有特殊需求的场景。
内容的提问来源于stack exchange,提问作者Bina Keshava
相关产品推荐
相关产品推荐

