Версии Java и совместимость

Меня смущают разные версии.

Я новичок, так что простите, если это очевидно, но... Я использую JDK 20, который, как я вижу, имеет некоторые функции в тестировании. На отдельном компьютере для проверки файлов JAR я погуглил и скачал самую последнюю версию Java, версию 8u361, но не JDK. Кажется, это то, что загрузил бы кто-то, кто не был разработчиком.

Мои экспортированные файлы JAR не открываются и говорят, что они были созданы с использованием более новой версии. Я смог решить эту проблему, уменьшив масштаб и используя JDK 1.8, который позволяет java 8u361 открывать их. Я что-то неправильно понимаю. Самая последняя версия Java SE не может запускать то, что я делаю с JDK 17, 18, 19 или 20? Я посмотрел на таблицу совместимости и не смог согласовать эти вопросы.
Какова эквивалентность JDK для Java SE?

«Я посмотрел таблицу совместимости» Какая таблица? Дайте ссылку.

Basil Bourque 10.04.2023 15:56

«загрузил самую последнюю версию Java» Что именно вы скачали? Откуда?

Basil Bourque 10.04.2023 16:02

Опубликуйте эти данные как правки к вашему вопросу, а не как комментарии.

Basil Bourque 10.04.2023 18:14
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
3
436
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

"Я погуглил и скачал самую последнюю версию Java, версию 8u361"

Это НЕ самая последняя версия Java. Вероятно, вы смотрели на https://java.com/en , который называется «Получить Java для настольных приложений». Вместо этого посмотрите здесь: https://oracle.com/au/java/technologies/downloads.

Начиная с Java 9, позиция Oracle заключается в том, что разработчик несет ответственность1 за предоставление JRE или JDK для запуска любых настольных приложений, которые они разрабатывают и распространяют. См. технический документ Oracle, Обновление дорожной карты клиента Java, 2020-05.

Таким образом, вы не найдете JRE под маркой Oracle или OpenJDK для Java после Java 8. Для пост-Java 8 ваши варианты:

  • Проинструктируйте своих пользователей, как установить Oracle или OpenJDK JDK.
  • Проинструктируйте своих пользователей, как установить стороннюю JRE.
  • Используйте сторонний генератор установщика, чтобы создать установщик со встроенной JRE (полученной от стороннего поставщика) или JDK.
  • Используйте jlink, чтобы создать собственную JRE для вашего приложения.
  • Для Java 14 и более поздних версий используйте jpackage, чтобы создать собственный исполняемый файл для вашего приложения.

Но чтобы ответить на ваш вопрос, Java SE 8 (он же JDK 1.82) — это 8uxx, Java SE 9 — это 9uxx, Java SE 10 — это 10uxx и так далее. В совместимости/эквивалентности нет никакой тайны.


1 - Oracle don't want to (unfairly) cop the blame for out-of-date / insecure Java installations dropped by application installers. And the don't want to (unfairly) cop the blame when an official Java patch release installed by the user causes an application to stop working. Dealing with these things is now 100% your responsibility as the app developer / distributor.
2 - The Java 1.N versus Java N stuff is engineering vs marketing nonsense that started back in the early 2000's. Don't be fooled. And for more information about Java versions, see the Wikipedia Java Version History page.)

Java 20 — это последняя и лучшая версия Java по состоянию на 2023–2004 годы.

Версии 8, 11 и 17 обозначены как версия с долгосрочной поддержкой. Эти версии продолжают получать обновления в течение многих лет. Другие промежуточные версии получают обновления только в течение нескольких месяцев.

Приложение, скомпилированное для версии Java с более низким номером, может быть запущено в той же версии Java или с более высоким номером. (Если только вы не используете функцию, удаленную позже, что редко случается с Java.)

Так что да, приложение, созданное для Java 8, может работать на версиях Java 8, 9, … 17, 18, 19 и 20. Но не наоборот. Приложение, созданное для Java 18, можно запускать только на версиях Java 18, 19 и 20.

Вы можете получить JDK (реализация спецификаций Java) у любого из нескольких поставщиков. Эти поставщики включают в произвольном порядке: Amazon, Adoptium (Eclipse Foundation), SAP, BellSoft, Microsoft, Azul Systems, Oracle, Red Hat, IBM и другие.

Вы сказали:

JDK 20, который я вижу, имеет некоторые функции в тестировании

Любая функция, доступная по умолчанию в Java 20 (или любой другой версии), полностью готова к использованию в производстве. Каждый выпуск от любого из поставщиков JDK прошел всестороннее тестирование.

Любая функция, не готовая к производству, то есть все еще находящаяся в разработке, помечается как инкубирующая или предварительная. Эти функции никогда не будут доступны вам по умолчанию. Таким образом, вы не можете использовать их невольно. Вы должны приложить все усилия, чтобы активировать такие функции.

Итак, поймите:

  • Каждый новый выпуск каждой версии JDK полностью готов к использованию в производстве.
  • Java 20 полностью готова к промышленному использованию.

Вы сказали:

Какова эквивалентность JDK для Java SE?

Java SE — это набор спецификаций, опубликованный Oracle Corp.

Java (и Java SE) является товарным знаком, принадлежащим корпорации Oracle. Доступно для использования только с разрешения Oracle.

JDK — это реализация спецификаций Java, а также компилятор и другие инструменты для разработки и администрирования.

Некоторые продукты JDK используют товарный знак «Java», но только в том случае, если это разрешено Oracle.

OpenJDK — это проект с открытым исходным кодом, разрабатывающий кодовую базу для реализации Java в нескольких архитектурах микросхем и операционных системах. Многие компании и частные лица вносят свой вклад. К ним относятся Oracle, IBM, Apple и другие. Многие продукты JDK в значительной степени, если не полностью, основаны на кодовой базе OpenJDK.

Другие вопросы по теме