2013-09-21 2 views
0

Вопрос в том, должна ли Java JDK и JRE быть совместимой для запуска?Будут ли программы, написанные против JDK Java 8, совместимыми с JRE J Java?

Я имею в виду: будут ли приложения Java, написанные с использованием JDK версии 8, в будущем работать с текущими JRE?

+0

Возможный дубликат [Совместим ли JDK «вверх» или «назад»?] (Http://stackoverflow.com/questions/4692626/is-jdk-upward-or-backward-compatible) – Julien

ответ

1

Короткий ответ No.

Если вы разрабатываете приложение в JDK 8 и запускаете его с помощью JRE 7, вы получите UnsupportedClassVersionError.

+0

Я согласен с этим ответом пока кто-то серьезно не придет и не объяснит подробности подробно. – spectre

2

Возможно использование cross-compilation options при компиляции. Сделайте это, и будет возможно скомпилировать код с SDK 8, совместимый с Java 1.1. Это не будет очень продвинутый код для версии 1.1, но он будет работать.

0

Этот вопрос две части:

  1. JDK против JRE
  2. вперед/назад совместимость.

JRE - это аббревиатура Java Runtime Environment. JDK - это акроним для Java Development Kit: набор инструментов, которые вы используете для разработки Java-программ. JDK также содержит полную JRE. В общем, между ними нет проблемы совместимости. Но вы можете захотеть не использовать библиотеки, которые доступны только в JDK (например, для генерации кода или tools.jar)

Сама Java компилируется в байт-код, который является совместимым с переходом. Это означает, что вы можете использовать байт-код любой версии Java и запускать его с любой новой версией. Другой способ вообще не работает и проверяется с помощью версии файла класса («java.lang.UnsupportedClassVersionError: Test: Unsupported major.minor version 51.0»).

Тогда есть библиотеки Java, включая основные библиотеки. До сих пор от них ничего не было удалено, поэтому они совместимы с первыми. Вероятно, это изменится с Java 9, где будут удалены очень маленькие неиспользуемые библиотечные функции.

Что касается обратной совместимости, это можно сделать, установив компилятор Java для создания байт-кода более старой версии. До Java 8 компилятор всегда мог создавать байт-код последних двух основных версий. Однако вы можете успешно скомпилировать источник Java 8 для Java 6, но не сможете его запустить. Это тот случай, когда вы используете библиотеки, которые доступны только на Java. Для таких случаев существует, например, плагин maven animalsniffer, который будет проверять, что при компиляции с более старой версией вы фактически используете только библиотеки, существующие в указанной версии.

Смежные вопросы