{"record":{"id":"edaac8e05a9c1792","repo":"quarkusio/quarkus","slug":"failed-to-resolve-extension-catalog-of-platformc","errorCode":null,"errorMessage":"Failed to resolve extension catalog of ${platformCoords} [from Maven repository ${repoId} (${repoUrl}) [which is a mirror of ... . The mirror may be out of sync.]]","messagePattern":"Failed to resolve extension catalog of (.+?) \\[from Maven repository (.+?) \\((.+?)\\) \\[which is a mirror of \\.\\.\\. \\. The mirror may be out of sync\\.\\]\\]","errorType":"exception","errorClass":"RegistryResolutionException","httpStatus":null,"severity":"error","filePath":"independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/client/maven/MavenPlatformExtensionsResolver.java","lineNumber":76,"sourceCode":"                t = t.getCause();\n            }\n            final StringBuilder buf = new StringBuilder();\n            buf.append(\"Failed to resolve extension catalog of \")\n                    .append(PlatformArtifacts.ensureBomArtifact(platformCoords).toCompactCoords());\n            if (repo != null) {\n                buf.append(\" from Maven repository \").append(repo.getId()).append(\" (\").append(repo.getUrl()).append(\")\");\n                final List<RemoteRepository> mirrored = repo.getMirroredRepositories();\n                if (!mirrored.isEmpty()) {\n                    buf.append(\" which is a mirror of \");\n                    buf.append(mirrored.get(0).getId()).append(\" (\").append(mirrored.get(0).getUrl()).append(\")\");\n                    for (int i = 1; i < mirrored.size(); ++i) {\n                        buf.append(\", \").append(mirrored.get(i).getId()).append(\" (\").append(mirrored.get(i).getUrl())\n                                .append(\")\");\n                    }\n                    buf.append(\". The mirror may be out of sync.\");\n                }\n            }\n            throw new RegistryResolutionException(buf.toString(), e);\n        }\n        try {\n            return ExtensionCatalog.mutableFromFile(jsonPath);\n        } catch (IOException e) {\n            throw new RegistryResolutionException(\"Failed to parse Quarkus extension catalog \" + jsonPath, e);\n        }\n    }\n\n    private String resolveLatestBomVersion(ArtifactCoords bom, String versionRange)\n            throws RegistryResolutionException {\n        final Artifact bomArtifact = new DefaultArtifact(bom.getGroupId(),\n                PlatformArtifacts.ensureBomArtifactId(bom.getArtifactId()),\n                \"\", \"pom\", bom.getVersion());\n        log.debug(\"Resolving the latest version of %s:%s:%s:%s in the range %s\", bom.getGroupId(), bom.getArtifactId(),\n                bom.getClassifier(), bom.getType(), versionRange);\n        try {\n            return artifactResolver.getLatestVersionFromRange(bomArtifact, versionRange);\n        } catch (Exception e) {","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/client/maven/MavenPlatformExtensionsResolver.java#L58-L94","documentation":"MavenPlatformExtensionsResolver resolves a platform member BOM's extension catalog from Maven. When the underlying Maven resolution fails, it builds a RegistryResolutionException listing the platform coordinates, the repository it was fetched from, and any mirrors of that repository, adding 'The mirror may be out of sync.' to hint at mirror staleness. A related error is thrown if the downloaded JSON cannot be parsed.","triggerScenarios":"resolvePlatformExtensions(bom) while Maven cannot download the platform BOM's catalog artifact from the repository or its mirrors — 404 because the mirror lacks the artifact, unreachable repo, or metadata mismatch between the primary repo and its mirror.","commonSituations":"Corporate Nexus/Artifactory mirror that has not yet proxied/cached the new Quarkus platform release; platform BOM published to a repo whose mirror is behind; wrong mirrorOf configuration in settings.xml; offline builds.","solutions":["Check the mirror URL in the message and sync it with the upstream repository (or force it to proxy on demand).","Verify the platform BOM coordinates exist at the repository URL shown (curl/404 check).","Fix settings.xml mirrorOf/repository configuration so the artifact can be fetched from the authoritative repo.","If the artifact did download but fails parsing, inspect jsonPath and clear the local cache; the companion message 'Failed to parse Quarkus extension catalog' covers that path.","Retry after the mirror catches up (new releases take time to propagate)."],"exampleFix":"// before (settings.xml)\n<mirror>\n  <id>corp</id><mirrorOf>external:*</mirrorOf>\n  <url>https://nexus.corp/maven-public</url> <!-- stale, missing new platform BOM -->\n</mirror>\n// after\n<!-- sync nexus.corp with upstream registry.maven.quarkus.io, or -->\n<mirror>\n  <id>corp</id><mirrorOf>*,!quarkus-registry</mirrorOf>\n  <url>https://nexus.corp/maven-public</url>\n</mirror>","handlingStrategy":"retry","validationCode":"// Before resolving, check the artifact is reachable at the repo/mirror:\n// curl -fsSI <repoUrl>/<platformCoords path>.json  -> expect 200","typeGuard":null,"tryCatchPattern":"// Java\ntry {\n    catalog = resolver.resolvePlatformExtensions(bomCoords);\n} catch (RegistryResolutionException e) {\n    if (e.getMessage().contains(\"The mirror may be out of sync\")) {\n        // wait/sync mirror, or route around it, then retry once\n        catalog = resolver.resolvePlatformExtensions(bomCoords);\n    } else throw e;\n}","preventionTips":["Keep corporate mirrors in sync or let them proxy-on-demand for registry.maven.quarkus.io.","Test mirrorOf rules in settings.xml after every Quarkus release.","Verify new platform BOM availability on the mirror before upgrading projects.","For parse errors (companion message), inspect the downloaded JSON and clear the local cache."],"tags":["maven","mirror","network","platform"],"backgroundTag":"maven-artifact-resolution-failed","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}