{"record":{"id":"2a6484539ae6c384","repo":"quarkusio/quarkus","slug":"failed-to-load-codegenprovider-class-from-deployme","errorCode":null,"errorMessage":"Failed to load CodeGenProvider class from deployment classloader","messagePattern":"Failed to load CodeGenProvider class from deployment classloader","errorType":"exception","errorClass":"CodeGenException","httpStatus":null,"severity":"critical","filePath":"core/deployment/src/main/java/io/quarkus/deployment/CodeGenerator.java","lineNumber":162,"sourceCode":"                        }\n\n                    }\n                }\n            }\n            return codeGens;\n        });\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    private static List<CodeGenProvider> loadCodeGenProviders(ClassLoader deploymentClassLoader)\n            throws CodeGenException {\n        Class<? extends CodeGenProvider> codeGenProviderClass;\n        try {\n            //noinspection unchecked\n            codeGenProviderClass = (Class<? extends CodeGenProvider>) deploymentClassLoader\n                    .loadClass(CodeGenProvider.class.getName());\n        } catch (ClassNotFoundException e) {\n            throw new CodeGenException(\"Failed to load CodeGenProvider class from deployment classloader\", e);\n        }\n        final Iterator<? extends CodeGenProvider> i = ServiceLoader.load(codeGenProviderClass, deploymentClassLoader)\n                .iterator();\n        if (!i.hasNext()) {\n            return List.of();\n        }\n        final List<CodeGenProvider> codeGenProviders = new ArrayList<>();\n        while (i.hasNext()) {\n            codeGenProviders.add(i.next());\n        }\n        return codeGenProviders;\n    }\n\n    private static <T> T callWithClassloader(ClassLoader deploymentClassLoader, CodeGenAction<T> supplier)\n            throws CodeGenException {\n        ClassLoader originalClassloader = Thread.currentThread().getContextClassLoader();\n        try {\n            Thread.currentThread().setContextClassLoader(deploymentClassLoader);","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/core/deployment/src/main/java/io/quarkus/deployment/CodeGenerator.java#L144-L180","documentation":"CodeGenerator.loadCodeGenProviders() loads the CodeGenProvider class by name from the deployment classloader before using ServiceLoader to discover code-generation providers. If the deployment classloader cannot load io.quarkus.deployment.CodeGenThing.CodeGenProvider (a ClassNotFoundException), it wraps it in a CodeGenException with this message. This indicates a broken or mismatched deployment classpath — the core deployment classes are not visible where code generation runs.","triggerScenarios":"Running Quarkus code generation (build augmentation, dev mode restart, or `quarkus:generate-code`) with a deployment classloader that cannot see quarkus-core-deployment — e.g. corrupted local Maven repository, mixed Quarkus versions on the classpath, or a custom bootstrap that builds a classloader omitting the core deployment module.","commonSituations":"Corrupted/incomplete ~/.m2 repository after interrupted downloads; mixing Quarkus versions (e.g. old quarkus-maven-plugin with newer platform BOM); custom build tooling or IDE launchers constructing their own deployment classloader; stale shaded/fat-jar layouts missing core deployment classes.","solutions":["Run a clean build with refreshed dependencies (mvn clean, and delete the affected artifacts from ~/.m2 to force re-download).","Align Quarkus versions: ensure quarkus-maven-plugin/gradle plugin, platform BOM, and core artifacts are all the same version.","If using a custom classloader/bootstrap, verify quarkus-core-deployment (containing CodeGenProvider) is on the deployment classloader.","Check the wrapped ClassNotFoundException's missing class name to identify which core artifact is absent and add/restore it."],"exampleFix":"// fix corrupted repo + version alignment\n// pom.xml: keep all Quarkus artifacts on one version\n<dependencyManagement>\n  <dependencies>\n    <dependency>\n      <groupId>io.quarkus.platform</groupId>\n      <artifactId>quarkus-bom</artifactId>\n      <version>3.x.y</version> <!-- same as plugin -->\n      <type>pom</type>\n      <scope>import</scope>\n    </dependency>\n  </dependencies>\n</dependencyManagement>\n// then: rm -rf ~/.m2/repository/io/quarkus && mvn clean install","handlingStrategy":"try-catch","validationCode":"// fail fast with a clear message if the deployment classloader is broken\nstatic void assertCodeGenAvailable(ClassLoader deploymentClassLoader) {\n    try {\n        Class.forName(\"io.quarkus.deployment.codegen.CodeGenProvider\", false, deploymentClassLoader);\n    } catch (ClassNotFoundException e) {\n        throw new IllegalStateException(\n            \"quarkus-core-deployment is missing from the deployment classloader; \"\n            + \"align Quarkus versions and repair the local Maven repository\", e);\n    }\n}","typeGuard":null,"tryCatchPattern":"try {\n    List<CodeGenProvider> providers = CodeGenerator.loadCodeGenProviders(deploymentClassLoader, ...);\n} catch (CodeGenException e) {\n    if (e.getMessage().contains(\"Failed to load CodeGenProvider class\")) {\n        throw new IllegalStateException(\"Broken deployment classpath: \"\n            + \"verify all Quarkus artifacts share one version and ~/.m2 is not corrupted\", e);\n    }\n    throw e;\n}","preventionTips":["Pin all Quarkus plugin/BOM/core artifacts to a single version","Delete and re-download corrupted artifacts from the local repository","In custom bootstraps, verify quarkus-core-deployment is on the deployment classloader","Log the ClassNotFoundException cause to identify the missing artifact quickly"],"tags":["quarkus","classloader","code-generation","classpath"],"backgroundTag":"classnotfound-deployment-classloader","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"}