Безопасно ли использовать JDK старшей версии?
От: vsb Казахстан  
Дата: 20.03.20 06:47
Оценка:
Всегда ставлю для разработки JDK той версии, на которой будет работать программа (например JDK 8). Но это приводит к тому, что в системе стоит куча разных JDK и нужно писать bat-ники для проставления нужного JAVA_HOME и тд. Было бы проще поставить, например, JDK 14 и использовать его для всего, просто передавая -release флаг. Могут ли при этом возникнуть какие-то несовместимости?

Раньше так делать было нельзя, т.к. компилятор не проверял методы стандартной библиотеки. Например можно было с JDK 8 скомпилировать код с -target 1.7, который использует API из 8 и программа падала в рантайме. Но, как я понимаю, в новых JDK этот режим улучшили, можно ли считать, что он стал достаточно надёжным? Или по прежнему нужно использовать старые JDK?
Re: Безопасно ли использовать JDK старшей версии?
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 26.03.20 05:16
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Могут ли при этом возникнуть какие-то несовместимости?


Да. Часть устаревших классов/методов были объявлены устаревшими в JDK 8 и удалены из JDK 9+
Из того, с чем я сталкивался — функционал, относящийся к работе с сертификатами шифрования. Есть и другие. Но там не очень много, так что — как повезёт. Может и сработать.

Ещё часть функционала переселилась из основной части в дополнительные модули. Например, что-то там из javax.* после плясок с бубном заработало, но пришлось какие-то там ключи в командной строке передавать для подключения каких-то там модулей.
С уважением, Artem Korneev.
Re: Безопасно ли использовать JDK старшей версии?
От: indee  
Дата: 26.03.20 07:30
Оценка: -1
Здравствуйте, vsb, Вы писали:

vsb>Всегда ставлю для разработки JDK той версии, на которой будет работать программа (например JDK 8). Но это приводит к тому, что в системе стоит куча разных JDK и нужно писать bat-ники для проставления нужного JAVA_HOME и тд. Было бы проще поставить, например, JDK 14 и использовать его для всего, просто передавая -release флаг. Могут ли при этом возникнуть какие-то несовместимости?


vsb>Раньше так делать было нельзя, т.к. компилятор не проверял методы стандартной библиотеки. Например можно было с JDK 8 скомпилировать код с -target 1.7, который использует API из 8 и программа падала в рантайме. Но, как я понимаю, в новых JDK этот режим улучшили, можно ли считать, что он стал достаточно надёжным? Или по прежнему нужно использовать старые JDK?


Думаю уровень безопасности зависит от использования того, что стало теперь deprecated/removed в новых версиях.
Я отоложил переход с 8 на 11 до появления лишних человеко-часов.
Вроде и собирается проjект и даже и запускается, а потом бац — в run-time какой-нибудь exception выкинет.
Стабильный и надежный софт вновь нужно вдоль и поперек по новой тестировать.

Жаль, что "Write once run anywhere" уже дано не работает, а теперь и подавно.
Re[2]: Безопасно ли использовать JDK старшей версии?
От: bzig  
Дата: 26.03.20 17:50
Оценка:
I>Вроде и собирается проjект и даже и запускается, а потом бац — в run-time какой-нибудь exception выкинет.

Не может такого быть, если не используется рефлекшн

I>Жаль, что "Write once run anywhere" уже дано не работает, а теперь и подавно.


Во-первых, зта парадигма никогда не позволяла писать какой попало код и рассчитывать, что будет исполняться везде.

Во-вторых, с какого момента она стала распространяться на старые версии Явы? Она рекламировала кросс-платформенный подход, а не кросс-версионный.
Re[2]: Безопасно ли использовать JDK старшей версии?
От: DenisCh  
Дата: 28.03.20 03:46
Оценка:
[deleted]
Отредактировано 28.03.2020 3:50 DenisCh . Предыдущая версия .
Re: Безопасно ли использовать JDK старшей версии?
От: sambl74 Россия  
Дата: 03.04.20 14:49
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Всегда ставлю для разработки JDK той версии, на которой будет работать программа (например JDK 8). Но это приводит к тому, что в системе стоит куча разных JDK и нужно писать bat-ники для проставления нужного JAVA_HOME и тд. Было бы проще поставить, например, JDK 14 и использовать его для всего, просто передавая -release флаг. Могут ли при этом возникнуть какие-то несовместимости?


Используй докер.

У меня похожая проблема с NodeJS, и решил я её с помощью nvm — причём она делает это очень просто — создаёт симлинк nodejs и он указывает на нужную версию. При переключении версии ноды просто пересоздаётся симлинк с нужной версией ноды. Думаю, что и для джавы это может сработать, хотя она вроде что-то прописывает в реестр.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.