{"record":{"id":"8b1e68231e33d1ca","repo":"quarkusio/quarkus","slug":"descriptorresolutionfailuremessage","errorCode":null,"errorMessage":"${descriptorResolutionFailureMessage}","messagePattern":"\\$\\{descriptorResolutionFailureMessage\\}","errorType":"exception","errorClass":"RegistryResolutionException","httpStatus":null,"severity":"error","filePath":"independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/client/maven/MavenRegistryClientFactory.java","lineNumber":80,"sourceCode":"        // Determine the original registry Maven repository configuration\n        // If the user settings already contain a Maven repository configuration with either an ID matching the registry ID\n        // or a URL matching the registry URL, the original Maven resolver will be assumed to be already properly initialized.\n        // Otherwise, a new registry Maven repository will be configured and a new resolver will be initialized for the registry.\n        final List<RemoteRepository> registryRepos = determineRegistryRepos(config, originalResolver.getRepositories());\n        MavenArtifactResolver resolver;\n        ArtifactResult result;\n        if (!registryRepos.isEmpty()) {\n            // first, we try applying the mirrors and proxies found in the user settings\n            final List<RemoteRepository> aggregatedRepos = applyMirrorsAndProxies(registryRepos);\n            resolver = newResolver(originalResolver, aggregatedRepos, config, log);\n            try {\n                result = MavenRegistryArtifactResolverWithCleanup.resolveAndCleanupOldTimestampedVersions(resolver,\n                        registryDescriptorCoords, cleanupTimestampedArtifacts);\n            } catch (BootstrapMavenException e) {\n                if (areMatching(registryRepos, aggregatedRepos)) {\n                    // the original and aggregated repos are matching, meaning no mirrors/proxies have been applied\n                    // there is nothing to fallback to\n                    throw new RegistryResolutionException(getDescriptorResolutionFailureMessage(config, resolver, e), e);\n                }\n                // if the mirror and proxies in the user settings were configured w/o taking the extension registry into account\n                // we will warn the user and try the original registry repos as a fallback\n                log.warn(getDescriptorResolutionFailureFromMirrorMessage(config, resolver, e, registryRepos));\n                resolver = newResolver(originalResolver, registryRepos, config, log);\n                try {\n                    result = MavenRegistryArtifactResolverWithCleanup.resolveAndCleanupOldTimestampedVersions(resolver,\n                            registryDescriptorCoords, cleanupTimestampedArtifacts);\n                } catch (BootstrapMavenException e1) {\n                    throw new RegistryResolutionException(getDescriptorResolutionFailureMessage(config, resolver, e));\n                }\n            }\n        } else {\n            resolver = newResolver(originalResolver, originalResolver.getRepositories(), config, log);\n            try {\n                result = MavenRegistryArtifactResolverWithCleanup.resolveAndCleanupOldTimestampedVersions(resolver,\n                        registryDescriptorCoords, cleanupTimestampedArtifacts);\n            } catch (BootstrapMavenException e) {","sourceCodeStart":62,"sourceCodeEnd":98,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/client/maven/MavenRegistryClientFactory.java#L62-L98","documentation":"buildRegistryClient() resolves the Quarkus extension registry descriptor artifact through a Maven resolver. When resolution fails with BootstrapMavenException and no Maven mirrors/proxies were applied (the aggregated repos are identical to the registry repos), there is no fallback configuration to retry, so the code wraps the failure in a RegistryResolutionException whose message includes the registry config, resolver repos, and the underlying cause.","triggerScenarios":"Calling buildRegistryClient(config) where the registry descriptor artifact (e.g. a platform descriptors JSON) cannot be downloaded from the configured registry repository and determineRegistryRepos() found registry repos to configure but no mirrors/proxies changed them; the resolver's attempt (network error, HTTP 404, auth failure) throws BootstrapMavenException.","commonSituations":"Registry URL typo or wrong host in quarkus.application/extension registries config or settings.xml; offline/air-gapped machine or corporate firewall blocking repo.quarkus.io; missing or invalid credentials in settings.xml for a private registry; descriptor artifact removed or registry version nonexistent; corrupted local Maven cache.","solutions":["Verify network connectivity to the registry repository URL shown in the cause (curl the repo URL/descriptor path); fix proxies/VPN/firewall if blocked","Check the registry id/url in your Quarkus registry config and ~/.m2/settings.xml for typos, and that the descriptor coordinates/version actually exist in the registry","If a corporate mirror is intended, configure it so it actually matches/applies to the registry repository (mirrorOf settings) — currently the code detected no mirror was applied","Add credentials for the registry repository in settings.xml servers section if the registry requires authentication","Clear the corrupted local cache entry for the descriptor (delete the artifact dir under ~/.m2/repository) and retry"],"exampleFix":"// before (settings.xml mirror that misses the registry)\n<mirror><id>corp</id><mirrorOf>external:*</mirrorOf>...</mirror> // but repo blocked\n// after: ensure registry reachable or explicitly mirror it\n<mirror><id>corp</id><mirrorOf>quarkus-registry</mirrorOf><url>https://corp-mirror.example/quarkus/registry</url></mirror>","handlingStrategy":"try-catch","validationCode":"// preflight: check reachability of the registry repo before building the client\nURL url = new URI(registryConfig.getUrl()).toURL();\nHttpURLConnection c = (HttpURLConnection) url.openConnection();\nc.setConnectTimeout(5000);\nif (c.getResponseCode() >= 400) throw new IllegalStateException(\"Registry unreachable: \" + url);","typeGuard":null,"tryCatchPattern":"try {\n    RegistryClient client = factory.buildRegistryClient(config);\n} catch (RegistryResolutionException e) {\n    log.errorf(e, \"Cannot resolve registry descriptor for %s; check URL/network/credentials\", config.getId());\n    // fall back to cached/offline mode or abort with a clear user message\n}","preventionTips":["curl the registry URL before configuring it","Keep registry coordinates/versions aligned with your Quarkus version","Configure corporate mirrors with correct mirrorOf rules","Put registry credentials in settings.xml servers, never inline","Periodically purge stale artifacts under ~/.m2/repository"],"tags":["maven","network","registry","resolution-failure"],"backgroundTag":"artifact-resolution-failed","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}