根据这个主题:获得java.lang.VerifyError的原因
如果执行jvm的版本比用于编译的jvm更新,java.lang.VerifyError将获得该版本。
我们总是可以使用以下jvm选项解决这个问题:-XX:-UseSplitVerifier。
根据这一规定:
https://stackoverflow.com/a/16467026/2674303
使用这个选项是“完全安全的”。
因此,我不明白为什么java.lang.VerifyError是阻碍成功编译的问题。请澄清。也许对图书馆来说哪种仪器的字节码不安全?
发布于 2014-09-28 13:35:44
您所链接的Q&A指的是一种特定类型的验证错误,使用另一种验证器可以安全地处理这些错误。但是,还有其他类型的验证错误,您不应该忽略.你不能用这种方式来处理。
简言之,有关问题中的意见一般不适用。一般而言:
如果您有需要建议的特定VerifyError,请包含完整的异常消息和堆栈跟踪,并描述其发生的情况。请注意,Andrey的回答是正确的,验证错误的一个常见原因是代码中的bug,它正在为各种目的执行“字节码工程”。通常,修复方法是更改为相应依赖项的不同版本。
发布于 2014-09-28 12:48:57
当您的字节代码在某种程度上不正确时,就会发生VerifyError。例如,当它试图从未初始化的变量中读取或将一个基元值赋给Object类型的字段时。工具库可能存在导致生成这种格式错误的字节码的错误。如果您能够分享错误的确切细节,我们可能会更具体地了解错误的确切原因。
发布于 2014-09-28 13:31:12
其目标是强制工具和库在操作Java字节码时生成正确的StackMapTable属性,这样JVM就不必执行缓慢而复杂的type inferencing验证阶段,而是只执行快速和简单的type checking阶段。
在Java8中,-XX:-UseSplitVerifier已经被废弃了,它不会有任何帮助了。
https://stackoverflow.com/questions/26084822
复制相似问题