LINUX.ORG.RU

Почему так много версий jdk?

 ,


0

2

Я так понимаю, что код написанный на одной версии не будет работать на другой.

openjdk-11-jdk-headless  # version 11.0.20.1+1-0ubuntu1~22.04, or
default-jdk              # version 2:1.11-72build2
openjdk-17-jdk-headless  # version 17.0.8.1+1~us1-0ubuntu1~22.04
openjdk-18-jdk-headless  # version 18.0.2+9-2~22.04
openjdk-19-jdk-headless  # version 19.0.2+7-0ubuntu3~22.04
openjdk-8-jdk-headless   # version 8u382-ga-1~22.04.1
ecj                      # version 3.16.0-1

Все немного сложнее.

Каждый новый релиз java приносит какие-то новые фишки как в язык, так и в VM.

При сборке программы можно указывать минимальный целевой уровень VM.

Для кода при этом можно указать отдельный уровень.

Т.е. используя jdk-17 можно собирать программу на языке java-8, с целевой VM jre-11.

При этом кроме версии байткода VM от jdk к jdk иногда меняется набор поставляемых компонентов.

Сейчас для большинства установок достаточно иметь jdk-8 + последнюю lts.

Belkrr
()
Ответ на: комментарий от saufesma

8 и 21, на девятой эффективные манагеры оракла немного поломали обратную совместимость. Можно запустить ну будут нужны либы.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)

Язык Java развивается, среда выполнения JVM развивается. Обычно есть совместимость сверху вниз по исходному коду программ, а также для программы можно указать совместимость с более старой версий Java. Но надо проверять работу. Во избежание неудобства смены версий, есть версии с долговременной поддержкой (LTS). Поддержка также включает исправление ошибок в JDK. Сейчас LTS версии это 8, 11, 17, 21. OpenJDK это общее название для аналогов Oracle JDK, имеющих открытый исходный код. Их много, создаются на основе Oracle OpenJDK. Их разработчики стараются обеспечить совместимость с Oracle JDK. Для импортозамещения подойдёт российский Axiom JDK.

Partisan ★★★★★
()
Ответ на: комментарий от Partisan

Для импортозамещения подойдёт российский Axiom JDK.

copy/paste версия Oracle OpenJDK? Кроме чувства брезгливости этот сайт https://axiomjdk.ru/ у меня не вызвал. Это тот самый плагиат!

А есть программы на Java которые запускаются с ярлычка? Или только в терминале

$java application
saufesma
() автор топика
Последнее исправление: saufesma (всего исправлений: 2)

что код написанный на одной версии не будет работать на другой.

  1. Если скопилено поздней версией, на ранней работать не будет, наоборот будет.

  2. В поздних версиях появился сахар в виде var (в 11 помоему) и не только, такое в 1.8 понятное дело не сработает. Но любой вменяемый иде покажет эти места.

А есть программы на Java которые запускаются с ярлычка?

Надо ассоцировать *.jar файлы с java -jar. На винде это просто работает она сама подхватывает этот тип файлов. Что там в твоём дистре я хз. Есть ещё возможность делать run файлы и *exe файлы на венде, но я таким бы не заморачивался.

Ygor ★★★★★
()
Ответ на: комментарий от saufesma

Можете уточнить?

Тебе херню какую-то советуют, достаточно поставить последнюю версию, судя по всему она у тебя помечена там, как default. Если потребуется зачем-то именно 1.8 или 11, проще их поставить в хомяке задав пути в ide. В качестве примера дока vscode https://code.visualstudio.com/docs/java/java-project

Ygor ★★★★★
()
Последнее исправление: Ygor (всего исправлений: 1)
Ответ на: комментарий от Ygor

Есть ещё возможность делать run файлы и *exe файлы на венде, но я таким бы не заморачивался.

Т.е. хочешь сказать, что пользователи твоей программы сами являются программистами? А сама Java не для написания программ для обычных пользователей, так?

saufesma
() автор топика
Последнее исправление: saufesma (всего исправлений: 1)

заклей пластырем половину. станет меньше в 2 раза.

Я так понимаю, что код написанный на одной версии не будет работать на другой.

МОАР этого в /дев. Да, модуляторы? Конечно да)

anonymous
()

Если не знаешь какую выбрать, выбирай default-jdk.

Но твои догадки верны, старая программа может не работать на новой версии jdk, новая на старой.

Обычно программы в репозитории зависят только от default-jdk.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

На jdk > 17 ничего нормально работать не будет скорее всего.

Стоит на компе по дефолту 21 - проблем ни с чем не испытываю.

ничего

А что конкретно должно нормально не работать?

ЗЫ Лор тоже работает на 21.

Ygor ★★★★★
()
Последнее исправление: Ygor (всего исправлений: 1)
Ответ на: комментарий от Ygor

Стоит на компе по дефолту 21 - проблем ни с чем не испытываю.
А что конкретно должно нормально не работать?

Я бы сказал Minecraft, но он два месяца назад как раз перешел на эту версию. Если разрабатывать, то постоянно отваливаются всякие умные библиотеки как lombok то libgdx.

https://github.com/libgdx/libgdx/issues/7300

https://github.com/projectlombok/lombok/issues/3393

Сейчас последняя версия 22, 21 это LTS.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

https://github.com/projectlombok/lombok/issues/3393

Ломбок я юзаю для своих хелоувордов на spring проблем не видел.

PS C:\Users\fake\eclipse-workspace\db> java -version
java version "21.0.1" 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 21.0.1+12-LTS-29)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.1+12-LTS-29, mixed mode, sharing)
PS C:\Users\fake\eclipse-workspace\db>
Ygor ★★★★★
()
Ответ на: комментарий от MOPKOBKA

java.lang.NoSuchFieldError: Class com.sun.tools.javac.tree.JCTree$JCImport

А, старая проблема.

Ещё со времён Sun, говорилось, что не стоит использовать com.sun. классы. Но интерфейс компилятора они так и не стандартизировали и не ввели что-то вроде javax.javac. Потому народ и использует что есть, а разработчики продолжают изменять эти классы в угоду своих потребностей, без оглядки на старые версии.

Но если твой код и используемые либы не использует com.sun., то проблем быть не должно.

WatchCat ★★★★★
()

Зависит от кода. Есть какая-то сборка 8.256, после которой внесли изменение и теперь старый код валится на новых сборках. Такое-то whire once, run everywere, что у яваскрипта уже лучше обратная совместимость.

anonymous
()

Почему так много версий jdk?

Потому что есть много разных прикладных программ, и каждая из них хочет свою версию jdk. Удалить не получится.

Shushundr ★★★★
()

Я так понимаю, что код написанный на одной версии не будет работать на другой

зависит от программы

я использую freeplane, поначалу установил яву не той версии, и приложуха сообщила в консоль, что ей нужна ява от такой-то версии до такой-то, уже не помню точно цифры, но разброс там приличный был

а у меня была установлена новейшая версия явы

anonymous
()