it-swarm.com.ru

Может ли программа, разработанная с Java 8, быть запущена на Java 7?

Я немного запутался.

  1. Oracle говорит, что Java 8 очень совместим с Java 7 (в обратном направлении). Но какие возможности существуют для этой программы Java 8) может быть запущен на Java 7 успешно (SE/EE)?

  2. Если точка первая была верна, Java 8 приложений будут развернуты и выполнены на сервере Java 7 сервера), например, Tomcat 8 или WildFly?

49
Mitsu Garcia

В общем нет.

Обратная совместимость означает, что вы можете запустить программу Java 7 на Java 8 runtime), а не наоборот.

Для этого есть несколько причин:

  • Байт-код является версионным, и JVM проверяет, поддерживает ли он найденную версию в файлах .class.

  • Некоторые языковые конструкции не могут быть выражены в предыдущих версиях байт-кода.

  • В более новых JRE есть новые классы и методы, которые не будут работать со старыми.

Если вы действительно, действительно хотите (совет: вы не хотите), вы можете заставить компилятор обрабатывать исходный код как одну версию Java) и генерировать байт-код для другой, используя что-то вроде этого:

javac -source 1.8 -target 1.7 MyClass.Java

( то же самое для Maven ), и скомпилируйте с JDK7, но на практике это чаще не работает, чем работает. Я не рекомендую.

[~ # ~] edit [~ # ~] : JDK 8 явно не поддерживает эту точную комбинацию, поэтому это не сработает. Некоторые другие комбинации версий работают.

Существуют также программы для преобразования более новых Java программ для работы на старых JVM. Для преобразования Java с 8 по 5-7, вы можете попробовать https : //github.com/orfjackal/retrolambda Чтобы получить меньше 5, вы можете выбрать один из них: http://en.wikipedia.org/wiki/Java_backporting_tools

Ни один из этих хаков не даст вам новых Java 8 классов и методов, включая поддержку функционального программирования для коллекций, потоков, API времени, неподписанного API и т.д. Поэтому я бы сказал, что это не стоит Это.

Или, так как вы хотите запускать Java 8 приложений JEE на сервере приложений, просто запустите весь сервер на Java 8, это может работать).

74
Karol S

означает обратную совместимость

Вы можете запустить более низкую конфигурацию на более высокой конфигурации, а не Vice-Versa.

13
Deepak Tiwari

Ну, есть опция компилятора - target , которая позволяет вам указывать формат файла класса предыдущих версий Java). Однако это не исправляет и не обнаруживает такие вещи, как как использование классов или методов, представленных в API JDK после целевой версии.

6
Nate

Отсутствие обратной совместимости означает, что программы на Java7 будут работать под Java8, но обратная не всегда верна

Вы также можете проверить обратная совместимость с лимитом Oracle

3
Rahul Tripathi

В целом, новые версии должны обеспечивать обратную совместимость, поэтому людям не нужно бросать свою работу и легко обновляться. И наоборот (более новая версия работает в более старой версии) не всегда так, потому что если вы используете какую-то новую реализованную функцию, эта функция, очевидно, не существует в предыдущей версии и не будет работать.

С уважением

2
ctutte