Files
BiLauncher/doc/cpp/JavaRuntimeService.md
2026-10-11 22:32:13 +03:00

4.7 KiB
Raw Permalink Blame History

JavaRuntimeService

javaruntimeservice.h, javaruntimeservice.cpp

Каталог сборок Java, которые лаунчер может скачать. Устроен как VersionManifestService, но кэш хранится сутки и лежит в <root>/cache/java_runtimes.json.

Источников два:

  • Mojang (в интерфейсе категория «Java») — те же рантаймы, с которыми игру запускает официальный лаунчер. Их немного, зато с игрой они точно совместимы.
  • Eclipse Temurin (JDK и JRE) — свежие сборки всех мажорных версий, в том числе тех, которых у Mojang ещё нет.

В каталог попадают только сборки под текущую ОС и архитектуру.

Экземпляр держит LauncherBackend, ставит сборки JavaInstaller.

Как обновляется каталог

Запросы идут параллельно. Каталог заменяется целиком, когда ответят все.

  1. api.adoptium.net/v3/info/available_releases — какие мажорные версии есть и какие из них LTS.
  2. Для каждой мажорной версии assets/feature_releases/<major>/ga с фильтрами: ОС, архитектура, HotSpot, обычная куча, vendor eclipse, три последних релиза. Из каждого берутся бинарники с image_type = jdk или jre в виде .zip или .tar.gz по https.
  3. piston-meta.mojang.com/.../java-runtime/.../all.json — раздел под текущую платформу (windows-x64, mac-os-arm64, linux и т. п.), по одному варианту на компонент. Компонент minecraft-java-exe пропускается: это не Java.

Нет сборки под aarch64. У Temurin под ARM нет Java 8 и 16. Если для aarch64 ничего не нашлось, запрос повторяется для x64. На Mac с Apple Silicon такая сборка работает через Rosetta. Сейчас повтор делается на любой ОС с aarch64, хотя комментарий в заголовке говорит только про macOS.

Id строк: temurin-<jdk|jre>-<версия>-<арх> и mojang-<компонент>, пропущенные через JavaRuntimeStore::sanitizeId().

Версия Temurin 8 показывается как 8u<security>, остальные — как openjdk_version без -LTS. Мажорная версия у Mojang берётся из имени (8u… → 8, иначе первое число).

У сборок Mojang size равен 0: в каталоге указан только размер манифеста, а не рантайма.

Если какие-то запросы упали, а другие ответили, каталог всё равно обновляется, а предупреждения склеиваются через ; . Если не пришло ничего, но старые данные есть, колбэк получает ok = true и предупреждение.

Кэш помечается платформой (mojangPlatform()). Кэш с другой платформы не читается. Это возможно, например, если папку лаунчера перенесли с другой машины.

Методы

  • ensureLoaded(callback, forceRefresh) — как у манифеста версий.
  • entries(kind) — строки одного вида, отсортированы по мажорной версии, потом по дате выхода, новые сверху.
  • find(id).
  • bestFor(major) — что скачать, если игре нужна Java major, а подходящей нет. Выбирается наименьшая мажорная версия не ниже major. При равенстве порядок такой: Temurin JDK, потом Mojang, потом Temurin JRE. JDK идёт первым, потому что установщикам Forge и NeoForge иногда нужны инструменты из полного комплекта. Если и здесь равенство, берётся более свежая.
  • isRefreshing(), hasData().

Сигналы: catalogChanged(), refreshingChanged().


При создании этого документа использовался ИИ.