Java 8 Update 11破坏了第三方工具

Oracle最近发布的Java 8 update 11(以及7 update 65)导致一些第三方工具出现了问题。ZeroTurnaround的JRebel是受影响的工具之一,Groovy编程语言也报告了不兼容情况。其它受影响的工具还包括Javassist,这是一个Java字节码操作库,同时还有一些用户报告了工具的问题,如Google的Guice(在某些情况下——尤其是那些使用了AOP的情况)和Jacoco代码覆盖工具。Oracle通过Groovy项目团队Jochen Theodorou提供的测试用例确认了这一Bug。

该问题似乎是由于8u11修改了JVM的字节码验证子系统而引起的。Java语言要求构造函数将任何对超类构造函数的调用作为其首先执行的动作,但在平台的早期版本中,字节码验证器似乎没有对这一点进行强制。Oracle决定开始更坚定地强制执行这一语言特性,这可能会消除一个语言规范的Bug,但它似乎已经对该生态系统中的许多工具产生了影响。

目前,没有任何迹象表明没有使用字节码重编或者AOP技术的Java代码受到该Bug的影响。据了解,8u11版本完全兼容所有由javac直接生成的、不受重编技术影响的字节码,但这些技术在现代框架中的广泛存在使得这一消息只能给开发人员带来有限的安慰。

Oracle至今尚未宣布发布修复补丁的日期,而且到目前为止,唯一的总体变通方案是使用-noverify开关或者避免在修复补丁发布之前升级。不过,个别工具已经提出了他们自己的变通方案,比如,Anton Arhipov(Zero Turnaround)已经确认,最新版本的JRebel(5.6.1)将包含针对这个问题的变通方案。

查看英文原文:Java 8 Update 11 Broke Third Party Tools

你可能感兴趣的:(Java 8 Update 11破坏了第三方工具)