JDK13中废弃的-Xverify:none/-noverify替代方案咨询
替代
-noverify的跨JDK解决方案 一、分版本使用等效参数
因为-noverify在JDK13之后被标记为废弃,需要根据不同JDK版本选择对应参数:
- JDK8~JDK12:直接用
-noverify或者-Xverify:none,两者功能完全一致,也不会触发废弃警告 - JDK13及以上:使用
--disable-verify(官方推荐的替代标准选项,无废弃警告),或者继续用-Xverify:none(该选项未被废弃,和--disable-verify效果相同)
二、CI环境自动适配(以Maven为例)
在CI构建脚本中根据JDK版本自动切换参数,无需手动维护:
<profiles> <profile> <id>jdk-pre-13</id> <activation> <jdk>[1.8,13)</jdk> </activation> <properties> <skip.verify.arg>-noverify</skip.verify.arg> </properties> </profile> <profile> <id>jdk-13-plus</id> <activation> <jdk>[13,)</jdk> </activation> <properties> <skip.verify.arg>--disable-verify</skip.verify.arg> </properties> </profile> </profiles> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <argLine>${skip.verify.arg}</argLine> </configuration> </plugin> </plugins> </build>
三、治本方案:修复常量池索引问题
禁用验证只是临时 workaround,更可靠的方式是修复生成B.class的模块:
- 生成字节码时,要确保
ldc、getstatic这类引用常量池的指令,使用的索引与B.class自身的常量池结构匹配,不能直接复用A.class的索引 - 可以用ASM这类字节码处理工具生成类文件,它能自动管理常量池的索引映射,无需手动维护,从根源避免索引不匹配的问题
内容的提问来源于stack exchange,提问作者Nicolas Baumann
相关产品推荐
相关产品推荐

