Подтвердить что ты не робот

Java-компилятор целевой версии "jsr14" с JDK7/8

Может ли кто-нибудь сказать, что целевая опция jsr14 для javac будет по-прежнему доступна с помощью JDK7/8?

Скажем,

$ javac -source 1.5 -target jsr14 Hello.java
4b9b3361

Ответ 1

Мы активно используем -jsr14 в OSGi, потому что он позволяет нам использовать генерики в нашем API, но все же развертывать в среде 1.4, которые по-прежнему популярны во встроенных. К сожалению, они сделали JDK 7 не обратно совместимыми с Java 6 и 5. Javac 1.7 игнорирует общую информацию, которая фактически присутствует в файлах JAR. К счастью, во время работы нет проблем, так как эта информация все равно игнорируется. И это не так, как если бы это была некоторая недокументированная функция...

К сожалению, люди на фронте часто очень мало относятся к людям, которые не могут просто обновиться до последних и самых больших. Угадайте, что Oracle действительно больше не заботится о встроенных рынках.

Теперь нам, скорее всего, придется отправить два JAR, один для встроенного и один для JDK 7. Отстой.

Это отчет об ошибке, который мы подали: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7078419

Ответ 2

В последнем исходном пакете OpenJDK (openjdk-7-ea-src-b130-18_feb_2011.zip) по-прежнему содержится флаг в источнике (langtools/src/share/classes/com/sun/tools/javac/jvm/Target.java), но он никогда не поддерживался, поэтому полагаться на него - плохая идея.

Зачем вам это нужно?

Ответ 3

Этот флаг был оставлен со стадии бета-версии 1.5. Он включался только для того, чтобы позволить 1.5 бета-компилятору обходить проверку или синтаксический анализ генериков по умолчанию, пока спецификация generics не была доработана. Как только 1.5 был выпущен, этот флаг стал бессмысленным. Новые версии компилятора могут не давать ошибок при столкновении с ним, но, скорее всего, молча игнорируют его.