2015-03-10 2 views
0

Я часто сталкивался с фразой Java X runtimes compiled against Java Y. Может ли кто-нибудь объяснить, что на самом деле означает это утверждение? Есть ли условие, когда X должно быть больше или равно Y, или это может быть что угодно? Как это работает в отношении JVM и JDK?Java Runtime компиляция

Простите меня за то, что вы не можете понять логику здесь.

+1

Короче говоря, это означает, что вы скомпилируете исходный код с другой версией Java JDK, а затем на исполняющую цель. например С JDK-версией 8 вы можете скомпилировать классы, которые будут выполняться с помощью JRE версии 6 'javac -source 1.6 -target 1.6 Main.java' – SubOptimal

ответ

1

Его немного сложно понять, о чем вы действительно спрашиваете, без того, чтобы вы приводили пример того, где вы это читаете.

Если что-то говорит «скомпилировано для Java 6», то вы можете безопасно использовать это в любой среде исполнения Java, начиная с Java 6 и выше, но с ошибкой «неподдерживаемая основная версия класса» на Java 5 и ниже.

Таким образом, по вашим собственным словам, X действительно должен быть равен или больше Y. Вы выбираете минимальную версию исполнения Java, которую вы хотите поддержать, в момент компиляции кода.

Долгое время разработчики библиотеки старались поддерживать совместимость своего кода с Java 5; его только недавно, что я видел совместимость, вплоть до Java 6 минимально. Причина для компиляции для таких старых и неподдерживаемых сред выполнения проста; это значит, что библиотеки будут работать с наибольшим количеством исполняемых файлов, которые установлены и используются. Естественно, вы не можете предположить, что все пользователи уже обновились до современных Java-приложений, все еще есть много старых программ, для которых требуется среда выполнения Java 5.

К счастью, поскольку SubOptimal уже комментирует, вы не вынуждены использовать Java 5 JDK для компиляции кода для совместимости с Java 5; вы можете использовать более новые JDK для создания байт-кода, совместимого со старыми версиями. Но вы не можете использовать Java 6 для компиляции кода с функциями Java 8 или, конечно же, для создания Java 8 байт-кода.

+0

Один из примеров, когда я прочитал его на одном из анверов для http: // stackoverflow.com/questions/24657418/spring-core-3-2-9-java-8 - «Spring 3.2.x будет поддерживать только время выполнения Java 8, скомпилированное против Java 7. Вы не можете использовать« статические интерфейсы », поскольку это Java 8 и не будет компилироваться против Java 7. " –

+0

Кроме того, если вы говорите «вы можете использовать более новые JDK для создания байт-кода, совместимого со старыми версиями» - я могу создать байт-код, совместимый с Java 7, от JDK 1.8, но я не могу использовать байт-код Java 8 для запуска на JVM 7 в этом отношении. Я прав? –

+0

@VaibhavAgarwal извините за поздний ответ. Ты прав. – Gimby