Ing*_*gel 11
据我所知,目前还没有解决这个问题的办法.最好的办法是扩展反向转换器来处理Java 1.7结构.钻石操作符应该非常简单,因为它根本不需要修改字节码.
您的声明"没有添加新的字节代码"是不正确的:有一个新的invokedynamic字节代码,更重要的是有几种情况下生成的字节码对1.6 JRE无效,因此反向转换器必须修复它.
使用版本1.6.0(即0x32)的Java 7 javac标记.class文件输出
printf "\x00\x00\x00\x32" |dd of=Example.class seek=4 bs=1 count=4 conv=notrunc
(根据http://en.wikipedia.org/wiki/Java_class_file#General_layout)
如果您将(使用$ 1作为文件名)放入,j6patch您可以使用以下命令执行所有类文件:
find . -name \*.class |xargs -I {} ./j6patch {}
我在一个大的(~4.8 MB jar)代码库上使用RetroTranslator它,甚至在java 6 jar上使用,因此Java 7语言功能可用于在Java 5中运行的应用程序.此外,Java 7编译器(javac)还有很多额外功能优化(例如逃逸分析)非常显着地提高了性能.
使用RetroTranslatorwith -verify -target 1.5和JRE 1.6运行时jar可以验证是否使用了Java 7运行时功能.