2026-09-03 09:16:56 +03:00
|
|
|
|
# JavaRuntimeService
|
|
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
`javaruntimeservice.h`, `javaruntimeservice.cpp`
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Каталог сборок Java, которые лаунчер может скачать. Устроен как
|
|
|
|
|
|
[VersionManifestService](VersionManifestService.md), но кэш хранится сутки и лежит в
|
|
|
|
|
|
`<root>/cache/java_runtimes.json`.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Источников два:
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
- **Mojang** (в интерфейсе категория «Java») — те же рантаймы, с которыми игру запускает
|
|
|
|
|
|
официальный лаунчер. Их немного, зато с игрой они точно совместимы.
|
|
|
|
|
|
- **Eclipse Temurin** (JDK и JRE) — свежие сборки всех мажорных версий, в том числе тех, которых у
|
|
|
|
|
|
Mojang ещё нет.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
В каталог попадают только сборки под текущую ОС и архитектуру.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Экземпляр держит [LauncherBackend](LauncherBackend.md), ставит сборки
|
|
|
|
|
|
[JavaInstaller](JavaInstaller.md).
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
## Как обновляется каталог
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Запросы идут параллельно. Каталог заменяется целиком, когда ответят все.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
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.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
**Нет сборки под aarch64.** У Temurin под ARM нет Java 8 и 16. Если для aarch64 ничего не нашлось,
|
|
|
|
|
|
запрос повторяется для `x64`. На Mac с Apple Silicon такая сборка работает через Rosetta. Сейчас
|
|
|
|
|
|
повтор делается на любой ОС с aarch64, хотя комментарий в заголовке говорит только про macOS.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Id строк: `temurin-<jdk|jre>-<версия>-<арх>` и `mojang-<компонент>`, пропущенные через
|
|
|
|
|
|
`JavaRuntimeStore::sanitizeId()`.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Версия Temurin 8 показывается как `8u<security>`, остальные — как `openjdk_version` без `-LTS`.
|
|
|
|
|
|
Мажорная версия у Mojang берётся из имени (`8u…` → 8, иначе первое число).
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
У сборок Mojang `size` равен 0: в каталоге указан только размер манифеста, а не рантайма.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Если какие-то запросы упали, а другие ответили, каталог всё равно обновляется, а предупреждения
|
|
|
|
|
|
склеиваются через `; `. Если не пришло ничего, но старые данные есть, колбэк получает `ok = true` и
|
|
|
|
|
|
предупреждение.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Кэш помечается платформой (`mojangPlatform()`). Кэш с другой платформы не читается. Это возможно,
|
|
|
|
|
|
например, если папку лаунчера перенесли с другой машины.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
## Методы
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
- `ensureLoaded(callback, forceRefresh)` — как у манифеста версий.
|
|
|
|
|
|
- `entries(kind)` — строки одного вида, отсортированы по мажорной версии, потом по дате выхода,
|
|
|
|
|
|
новые сверху.
|
|
|
|
|
|
- `find(id)`.
|
|
|
|
|
|
- `bestFor(major)` — что скачать, если игре нужна Java `major`, а подходящей нет. Выбирается
|
|
|
|
|
|
наименьшая мажорная версия не ниже `major`. При равенстве порядок такой: Temurin JDK, потом
|
|
|
|
|
|
Mojang, потом Temurin JRE. JDK идёт первым, потому что установщикам Forge и NeoForge иногда нужны
|
|
|
|
|
|
инструменты из полного комплекта. Если и здесь равенство, берётся более свежая.
|
|
|
|
|
|
- `isRefreshing()`, `hasData()`.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
2026-10-11 22:32:13 +03:00
|
|
|
|
Сигналы: `catalogChanged()`, `refreshingChanged()`.
|
2026-09-03 09:16:56 +03:00
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
|
|
|
|
|
|
При создании этого документа использовался ИИ.
|