Программа, созданная на Java 8, может быть запущена на Java 7?
Я немного смущен.
Oracle говорит, что Java 8 очень совместима с Java 7 (в обратном направлении). Но какие существуют возможности того, что программа на Java 8 может быть успешно запущена на Java 7 (SE/EE)?
Если первый пункт был верным, приложения Java 8 будут развернуты и выполнены на поддержке сервера Java 7? например, Tomcat 8 или WildFly?
6 ответов
В общем нет.
Обратная совместимость означает, что вы можете запускать программу Java 7 во время выполнения Java 8, а не наоборот.
Для этого есть несколько причин:
Байт-код является версионным, и JVM проверяет, поддерживает ли он найденную версию в файлах.class.
Некоторые языковые конструкции не могут быть выражены в предыдущих версиях байт-кода.
В более новых JRE есть новые классы и методы, которые не будут работать со старыми.
Если вы действительно, действительно хотите (совет: вы не хотите), вы можете заставить компилятор обрабатывать исходный код как одну версию Java и генерировать байт-код для другой, используя что-то вроде этого:
javac -source 1.8 -target 1.7 MyClass.java
( то же самое для Maven), и скомпилируйте против JDK7, но на практике это будет чаще не работать, чем работать. Я рекомендую вам этого не делать.
РЕДАКТИРОВАТЬ: 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, это может сработать.
Средства обратной совместимости
Вы можете запустить более низкую конфигурацию на более высокой конфигурации не Vice-Versa
,
Отсутствие обратной совместимости означает, что программы на Java7 будут работать под Java8, но обратное не всегда верно
Вы также можете проверить обратную совместимость Oracle Limit
В целом, новые версии должны обеспечивать обратную совместимость, поэтому людям не нужно бросать свою работу и они могут легко обновиться. И наоборот (более новая версия работает в более старой версии) не всегда так, потому что если вы используете какую-то новую реализованную функцию, эта функция, очевидно, не существует в предыдущей версии и не будет работать.
С уважением
Я создал заглушки из WSDL, скомпилировал в java 8 и смог развернуть их на сервере с java 1.6 jvm.