yguard 3.0.0混淆Java17项目报Unsupported class file major version 61如何解决
问题根因
Unsupported class file major version 61 本质是当前使用的yGuard 3.0.0内置的ASM字节码解析库版本过低,不支持Java 17编译生成的字节码,可按以下步骤排查解决:
解决方案
优先升级yGuard版本
yGuard 3.0.0最高仅支持Java 16的字节码解析,官方从4.0版本开始正式支持Java 17,直接替换yGuard的jar包为最新4.x版本即可,现有ANT混淆配置无需做额外修改,就能直接兼容Java 17字节码。排查编译链路的字节码版本(如果暂时不想升级yGuard)
仅修改Eclipse工作区编译器合规级别不生效是因为ANT编译任务独立于IDE配置,需要做两处确认:- 检查ANT打包的
javac任务配置,是否显式指定了编译参数,确保添加三个参数:source="11" target="11" release="11",release参数是Java 9后新增的,仅配置source和target可能仍会生成包含高版本特性的字节码 - 确认执行ANT任务时使用的JDK版本,如果ANT运行在OpenJDK 17环境下,javac默认会生成JDK 17版本的字节码,需要把ANT的运行时JDK切换为JDK 11
- 检查ANT打包的
排查依赖包的字节码版本
检查<externalclasses>标签下引入的所有第三方依赖包,是否存在用JDK 17编译生成的class文件,可以通过javap -v your.class命令查看class的主版本号,如有则替换为兼容JDK 11的低版本依赖包,或者升级yGuard到4.x版本兼容。
内容的提问来源于stack exchange,提问作者Jeancc
相关产品推荐
相关产品推荐

