Здравствуйте, 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" уже дано не работает, а теперь и подавно.
Всегда ставлю для разработки JDK той версии, на которой будет работать программа (например JDK 8). Но это приводит к тому, что в системе стоит куча разных JDK и нужно писать bat-ники для проставления нужного JAVA_HOME и тд. Было бы проще поставить, например, JDK 14 и использовать его для всего, просто передавая -release флаг. Могут ли при этом возникнуть какие-то несовместимости?
Раньше так делать было нельзя, т.к. компилятор не проверял методы стандартной библиотеки. Например можно было с JDK 8 скомпилировать код с -target 1.7, который использует API из 8 и программа падала в рантайме. Но, как я понимаю, в новых JDK этот режим улучшили, можно ли считать, что он стал достаточно надёжным? Или по прежнему нужно использовать старые JDK?
Здравствуйте, vsb, Вы писали:
vsb>Могут ли при этом возникнуть какие-то несовместимости?
Да. Часть устаревших классов/методов были объявлены устаревшими в JDK 8 и удалены из JDK 9+
Из того, с чем я сталкивался — функционал, относящийся к работе с сертификатами шифрования. Есть и другие. Но там не очень много, так что — как повезёт. Может и сработать.
Ещё часть функционала переселилась из основной части в дополнительные модули. Например, что-то там из javax.* после плясок с бубном заработало, но пришлось какие-то там ключи в командной строке передавать для подключения каких-то там модулей.
С уважением, Artem Korneev.
Re[2]: Безопасно ли использовать JDK старшей версии?
Здравствуйте, vsb, Вы писали:
vsb>Всегда ставлю для разработки JDK той версии, на которой будет работать программа (например JDK 8). Но это приводит к тому, что в системе стоит куча разных JDK и нужно писать bat-ники для проставления нужного JAVA_HOME и тд. Было бы проще поставить, например, JDK 14 и использовать его для всего, просто передавая -release флаг. Могут ли при этом возникнуть какие-то несовместимости?
Используй докер.
У меня похожая проблема с NodeJS, и решил я её с помощью nvm — причём она делает это очень просто — создаёт симлинк nodejs и он указывает на нужную версию. При переключении версии ноды просто пересоздаётся симлинк с нужной версией ноды. Думаю, что и для джавы это может сработать, хотя она вроде что-то прописывает в реестр.