{"record":{"id":"8cb649219a3c59cd","repo":"HMCL-dev/HMCL","slug":"unsupported-platform-platform","errorCode":null,"errorMessage":"Unsupported platform: ${platform}","messagePattern":"Unsupported platform: (.+?)","errorType":"exception","errorClass":"UnsupportedPlatformException","httpStatus":null,"severity":"error","filePath":"HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/mojang/MojangJavaDownloadTask.java","lineNumber":68,"sourceCode":"    private final DownloadProvider downloadProvider;\n    private final Path target;\n    private final Path tempDir;\n    private final Task<MojangJavaRemoteFiles> javaDownloadsTask;\n    private final List<Task<?>> dependencies = new ArrayList<>();\n\n    private volatile MojangJavaDownloads.JavaDownload download;\n\n    public MojangJavaDownloadTask(DownloadProvider downloadProvider, Path target, Path tempDir, GameJavaVersion javaVersion, String platform) {\n        this.target = target;\n        this.tempDir = tempDir;\n        this.downloadProvider = downloadProvider;\n        this.javaDownloadsTask = new GetTask(downloadProvider.injectURLWithCandidates(JAVA_LIST_URL))\n                .thenComposeAsync(javaDownloadsJson -> {\n                    MojangJavaDownloads allDownloads = JsonUtils.fromNonNullJson(javaDownloadsJson, MojangJavaDownloads.class);\n\n                    Map<String, List<MojangJavaDownloads.JavaDownload>> osDownloads = allDownloads.downloads().get(platform);\n                    if (osDownloads == null || !osDownloads.containsKey(javaVersion.component()))\n                        throw new UnsupportedPlatformException(\"Unsupported platform: \" + platform);\n                    List<MojangJavaDownloads.JavaDownload> candidates = osDownloads.get(javaVersion.component());\n                    for (MojangJavaDownloads.JavaDownload download : candidates) {\n                        if (JavaInfo.parseVersion(download.version().name()) >= javaVersion.majorVersion()) {\n                            this.download = download;\n                            return new GetTask(downloadProvider.injectURLWithCandidates(download.manifest().getUrl()));\n                        }\n                    }\n                    throw new UnsupportedPlatformException(\"Candidates: \" + JsonUtils.GSON.toJson(candidates));\n                })\n                .thenApplyAsync(javaDownloadJson -> JsonUtils.fromNonNullJson(javaDownloadJson, MojangJavaRemoteFiles.class));\n    }\n\n    @Override\n    public Collection<Task<?>> getDependents() {\n        return Collections.singleton(javaDownloadsTask);\n    }\n\n    @Override","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/HMCL-dev/HMCL/blob/24702dc5a0214034f4c27166d5fd30cad08cec19/HMCLCore/src/main/java/org/jackhuang/hmcl/download/java/mojang/MojangJavaDownloadTask.java#L50-L86","documentation":"When HMCL downloads a Mojang-hosted Java runtime, it fetches the java-runtime JSON index and looks up the entry for the current platform (`platform`) and the requested Java component. If that OS key or the requested Java component is missing from Mojang's download index, Mojang simply doesn't ship that runtime for this OS, and MojangJavaDownloadTask throws UnsupportedPlatformException.","triggerScenarios":"Calling MojangJavaDownloadTask with a platform whose key is absent from MojangJavaDownloads.downloads() (e.g. an OS/architecture Mojang doesn't host), or requesting a javaVersion component (e.g. java-runtime-gamma) not published for that platform.","commonSituations":"Running HMCL on an uncommon OS/architecture combination (e.g. unusual Linux libc, BSD, 32-bit) where Mojang publishes no runtime; Mojang removed a runtime component for a platform; custom platform string detection returning an unsupported value.","solutions":["Check your OS/architecture is one Mojang publishes runtimes for; otherwise use a different Java download source (adoptium/aliyun download provider) instead of Mojang.","Pick a different Java version/component that exists for your platform.","Correct the platform detection value passed to MojangJavaDownloadTask if it is wrong.","Update HMCL — platform mapping tables are fixed in newer releases."],"exampleFix":"// before\nnew MojangJavaDownloadTask(downloadProvider, javaVersion, \"linux-musl\");\n// after\nnew MojangJavaDownloadTask(downloadProvider, javaVersion, System.OS.toString()); // only if supported, else use Adoptium provider","handlingStrategy":"fallback","validationCode":"// Pre-check Mojang's index for your platform before constructing the task\nMojangJavaDownloads d = JsonUtils.fromNonNullJson(indexJson, MojangJavaDownloads.class);\nboolean supported = d.downloads().containsKey(platform) && d.downloads().get(platform).stream().anyMatch(x -> x.component().equals(javaVersion.component()));","typeGuard":"if (!allDownloads.downloads().containsKey(platform)) { switchToFallbackProvider(); }","tryCatchPattern":"try { return taskExecutor.submitTask(new MojangJavaDownloadTask(...)).get(); }\ncatch (UnsupportedPlatformException e) { LOG.warning(e.getMessage()); return provisionJavaViaAdoptium(javaVersion); }","preventionTips":["Only use the Mojang provider on platforms Mojang publishes runtimes for (win/mac/linux x64/arm64).","Configure an alternate Java download provider (Adoptium) as fallback.","Keep HMCL updated so platform detection matches current Mojang keys."],"tags":["platform","java-runtime","download","unsupported"],"backgroundTag":"unsupported-platform","analyzedSha":"24702dc5a0214034f4c27166d5fd30cad08cec19","analyzedAt":"2026-09-10T12:36:46.680Z","contentChangedAt":"2026-09-10T12:36:46.680Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}