{"record":{"id":"2e2c67c8265ef7fd","repo":"quarkusio/quarkus","slug":"failed-to-resolve-the-registry-client-factory-prov","errorCode":null,"errorMessage":"Failed to resolve the registry client factory provider artifact ${providerArtifact}","messagePattern":"Failed to resolve the registry client factory provider artifact (.+?)","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/ExtensionCatalogResolver.java","lineNumber":160,"sourceCode":"            return getDefaultClientFactory();\n        }\n\n        public RegistryClientFactory loadFromArtifact(RegistryConfig config, final Object providerValue) {\n            ArtifactCoords providerArtifact;\n            try {\n                final String providerStr = (String) providerValue;\n                providerArtifact = ArtifactCoords.fromString(providerStr);\n            } catch (Exception e) {\n                throw new IllegalStateException(\"Failed to process configuration of \" + config.getId()\n                        + \" registry: failed to cast \" + providerValue + \" to String\", e);\n            }\n            final File providerJar;\n            try {\n                providerJar = artifactResolver.resolve(new DefaultArtifact(providerArtifact.getGroupId(),\n                        providerArtifact.getArtifactId(), providerArtifact.getClassifier(),\n                        providerArtifact.getType(), providerArtifact.getVersion())).getArtifact().getFile();\n            } catch (BootstrapMavenException e) {\n                throw new IllegalStateException(\n                        \"Failed to resolve the registry client factory provider artifact \" + providerArtifact, e);\n            }\n            log.debug(\"Loading registry client factory for %s from %s\", config.getId(), providerArtifact);\n            final URL url;\n            try {\n                url = providerJar.toURI().toURL();\n            } catch (MalformedURLException e) {\n                throw new IllegalStateException(\"Failed to translate \" + providerJar + \" to URL\", e);\n            }\n            return loadFromUrl(url);\n        }\n\n        private RegistryClientFactory loadFromUrl(final URL url) {\n            try {\n                // here we use the classloader that loaded RegistryClientFactoryProvider instead of the TCCL\n                // because, apparently, the TCCL doesn't work for this use-case from Maven plugins with extensions enabled\n                final ClassLoader providerCl = new URLClassLoader(new URL[] { url },\n                        RegistryClientFactoryProvider.class.getClassLoader());","sourceCodeStart":142,"sourceCodeEnd":178,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/ExtensionCatalogResolver.java#L142-L178","documentation":"Thrown as IllegalStateException when the Maven artifact resolver cannot resolve the registry client factory provider artifact (the jar containing the RegistryClientFactory provider) declared in a registry client configuration. The library downloads this provider jar from configured repositories before loading the factory via a classloader. The original BootstrapMavenException is preserved as the cause.","triggerScenarios":"Calling ExtensionCatalogResolver.getClientFactory() when a registry client config has a providerArtifact and artifactResolver.resolve(DefaultArtifact...) throws BootstrapMavenException (artifact missing from all configured repositories, bad coordinates, or repository access failure).","commonSituations":"Typo in groupId/artifactId/version of the registry client factory provider in the Maven settings or registry client config JSON; provider artifact removed or version bumped upstream; corporate proxy/firewall blocking repository access; repository not declared in settings.xml.","solutions":["Verify the provider artifact coordinates in the registry client configuration are correct (groupId:artifactId:classifier:type:version) and that the version exists","Run 'mvn dependency:get -Dartifact=<coords>' manually to confirm the artifact is resolvable from your configured repositories","Check settings.xml mirrors/proxies and network connectivity to the repository hosting the provider jar","Inspect the cause chain (BootstrapMavenException) for the exact repository/HTTP error"],"exampleFix":"// before (broken coordinates in registry client config)\n{\"id\":\"my-registry\",\"client-factory-provider\":\"com.example:factory-provider:9.9.9\"}\n// after (valid released coordinates)\n{\"id\":\"my-registry\",\"client-factory-provider\":\"com.example:factory-provider:1.0.0\"}","handlingStrategy":"try-catch","validationCode":"// Verify resolvability beforehand\nnew DefaultArtifact(groupId, artifactId, classifier, type, version);\nmvn dependency:get -Dartifact=groupId:artifactId:version","typeGuard":null,"tryCatchPattern":"try { resolver.getClientFactory(); } catch (IllegalStateException e) { if (e.getCause() instanceof BootstrapMavenException bme) { /* log bme, fix coordinates/repo access */ } throw e; }","preventionTips":["Validate provider artifact coordinates against the repository before configuring them","Pin explicit, existing versions of the provider artifact","Declare all repositories hosting the provider in settings.xml","Test registry client configs in CI with dependency:get"],"tags":["maven","artifact-resolution","registry-client"],"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"}