Java 17中patch jdk.unsupported模块遇ResolutionException的解决办法
解决Java 17中patch jdk.unsupported模块运行冲突的方案
问题根源在于你使用了完整的OpenJDK 8 rt.jar进行模块patch,其中包含的java.time.zone包与Java 17中java.base模块导出给jdk.unsupported的同包冲突。只需要提取rt.jar中你实际需要的sun.misc相关类即可解决:
- 提取sun.misc类文件
从OpenJDK 8的rt.jar中仅导出sun/misc目录下的所有类:
jar xf /path/to/rt.jar sun/misc
执行后会在当前目录生成sun/misc文件夹,包含BASE64Decoder.class、BASE64Encoder.class等目标类。
- 编译代码
使用提取后的目录进行模块patch编译:
javac --patch-module=jdk.unsupported=/path/to/extracted-sun-misc-dir TestDecoder.java
(注:/path/to/extracted-sun-misc-dir是包含sun文件夹的上级目录)
- 运行程序
同样用提取后的目录patch模块运行,无需再将rt.jar加入classpath:
java --patch-module=jdk.unsupported=/path/to/extracted-sun-misc-dir TestDecoder
这样就避免了无关包的冲突,同时保留了sun.misc.BASE64Decoder的原有算法行为。
内容的提问来源于stack exchange,提问作者gbear605
相关产品推荐
相关产品推荐

