Могут ли новые версии JRE запускать программы Java, скомпилированные с более старыми версиями JDK?
Это может быть глупый вопрос, но возникнут ли у меня проблемы с запуском программ Java и связанных с ними библиотек, скомпилированных в Java версии 1.6 и 1.7 (я компилирую с использованием 1.7, тогда как некоторые библиотеки компилируются с использованием 1.6) и запуск всей программы в 1.7 JRE?
2 ответов:
вы не столкнетесь с какими - либо проблемами-это магия Java-это обратная совместимость.Вы можете запустить почти весь код с Java 1 на Java 8. Нет причин, по которым код Java 6 не будет выполняться в среде выполнения Java 8.
Что интересно, так это то, что для приложений, написанных, скажем, на Java 1.4, у вас даже увеличивается скорость при их запуске в более поздних средах выполнения. Это связано с тем, что Java постоянно развивается, не только язык, известный как" Java", но и JVM (Java virtual машина.) У меня все еще есть исходный код более чем 10 лет назад, который все еще работает, как и ожидалось в последнем JVM.
Если вы хотите нацелиться, скажем, на виртуальную машину Java 5, то вы можете сделать это с помощью инструментов Java 8 SDK. В конечном итоге вы можете указать, какую целевую виртуальную машину вы хотите поддерживать, если вы помните, что виртуальная машина версии 5 может не поддерживать все функции, которые будет поддерживать виртуальная машина версии 8.
Я только что протестировал код, который я написал в Java 5 против новой Java 8 runtime и все такое работает так, как ожидалось, поэтому, хотя сейчас у нас есть более мощный язык и среда выполнения, мы можем продолжать использовать наши инвестиции прошлого. Только это делает Java отличным выбором для развития компаний.
Как ответили уже вы в основном безопасный и большинство продукты и 3rd партийные библиотеки будут просто работать. Однако там существуют очень редкие случаи, когда бинарной несовместимости (те, где файл класса, скомпилированный с использованием старого JDK, не будет работать в новом JVM) были введены между версиями JDK.
официальный список несовместимостей Oracle Java между версии:
- в Java SE 9 С Java SE 8
- в Java SE 8 С Java SE 7
- в Java SE 7 С Java SE 6
- в Java SE 6 С Java SE 5.0
- в Java SE 5.0 с Java SE 1.4.2
инструмент совместимости
в комплекте с JDK 9, есть инструмент под названием jdeprscan который проверит совместимость, перечислит больше не используемые API в вашем коде и предложит альтернативы(!). Вы можете указать цель версия JDK (работает на JDK 9,8,7 и 6) и он будет перечислять несовместимости, характерные для вашей целевой версии.
дополнительный комментарий в случае библиотек:
разумное правило-использовать последнюю стабильную версию библиотеки для версии JRE ваши программные цели. Очевидно, что вы найдете много исключений из этого правила, но в целом стабильность общедоступных библиотек обычно увеличивается со временем.
естественно совместимость API и управление версиями должны учитываться при изменении версий зависимостей.
опять же самые популярные зависимости будут иметь веб-страницы, где такая информация должна быть доступна.
Если, однако, вы используете что-то более неясное, вы можете различить, какие JRE были классами в вашей зависимости, скомпилированной для.
вот отличный ответ о том, как узнать версию класса. Возможно, вам придется сначала распаковать файл JAR.
Comments