Пометить вывод файла .class с помощью Java 7 javac с версией 1.6.0 (т.е. 0x32)
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 МБ jar) базы кода и даже использовал RetroTranslator
для java 6 jar, так что возможности языка Java 7 можно использовать в приложении, работающем в Java 5. Также компилятор Java 7 (javac
) выполняет много дополнительных оптимизаций (например, escape-анализ), что очень заметно повышает производительность.
Использование RetroTranslator
с jar-файлами времени выполнения -verify -target 1.5
и JRE 1.6 позволяет проверить, что функции времени выполнения Java 7 не используются.