{"record":{"id":"d739540c45e2f05a","repo":"quarkusio/quarkus","slug":"java-lang-runtimeexception-d73954","errorCode":null,"errorMessage":"java.lang.RuntimeException","messagePattern":"java\\.lang\\.RuntimeException","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"independent-projects/bootstrap/core/src/main/java/io/quarkus/bootstrap/app/CuratedApplication.java","lineNumber":110,"sourceCode":"\n    public QuarkusBootstrap getQuarkusBootstrap() {\n        return quarkusBootstrap;\n    }\n\n    public Object runInAugmentClassLoader(String consumerName, Map<String, Object> params) {\n        return runInCl(consumerName, params, getOrCreateAugmentClassLoader());\n    }\n\n    public CurationResult getCurationResult() {\n        return curationResult;\n    }\n\n    public AugmentAction createAugmentor() {\n        try {\n            Class<?> augmentor = getOrCreateAugmentClassLoader().loadClass(AUGMENTOR);\n            return (AugmentAction) augmentor.getConstructor(CuratedApplication.class).newInstance(this);\n        } catch (Exception e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    /**\n     * This creates an augmentor, but uses the supplied class name to customise the build chain.\n     *\n     * The class name that is passed in must be the name of an implementation of\n     * {@code Function<Map<String, Object>, List<Consumer<BuildChainBuilder>>>}\n     * which is used to generate a list of build chain customisers to control the build.\n     */\n    @SuppressWarnings({ \"unchecked\", \"rawtypes\" })\n    public AugmentAction createAugmentor(String functionName, Map<String, Object> props) {\n        try {\n            Class<?> augmentor = getOrCreateAugmentClassLoader().loadClass(AUGMENTOR);\n            Function<Object, Object> function = (Function<Object, Object>) getOrCreateAugmentClassLoader()\n                    .loadClass(functionName)\n                    .getDeclaredConstructor()\n                    .newInstance();","sourceCodeStart":92,"sourceCodeEnd":128,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/bootstrap/core/src/main/java/io/quarkus/bootstrap/app/CuratedApplication.java#L92-L128","documentation":"CuratedApplication.createAugmentor loads io.quarkus.deployment.CodeGenerator/augmentor class (AUGMENTOR constant) reflectively from the augmentation classloader and instantiates it. Any failure — ClassNotFoundException, linkage errors, reflective instantiation problems — is wrapped in a plain RuntimeException, hiding the underlying cause.","triggerScenarios":"Calling createAugmentor() (directly or via app()/initAugmentAction()/handleDevServices()) when the augmentor class cannot be loaded from the augment classloader: missing quarkus-deployment classes, classloader isolation issues, or a constructor mismatch.","commonSituations":"Quarkus version mismatch (quarkus-core vs quarkus-deployment), the curated bootstrap being built with isolateDeployment=true while deployment classes are missing, corrupted dependency resolution, or running augmentation with an incomplete curated application.","solutions":["Inspect the cause chain of the RuntimeException for the ClassNotFound/LinkageError","Ensure quarkus-deployment and quarkus-core versions match in the dependency tree (mvn dependency:tree)","Remove stale classpath caches so the augment classloader is rebuilt from current artifacts","If using isolated deployment, verify all deployment dependencies are resolvable in the isolated classloader"],"exampleFix":"// before\n<!-- mismatched versions -->\n<dependency><groupId>io.quarkus</groupId><artifactId>quarkus-core</artifactId><version>3.0.0</version></dependency>\n// after\n<!-- aligned via BOM -->\n<dependencyManagement><dependencies><dependency><groupId>io.quarkus.platform</groupId><artifactId>quarkus-bom</artifactId><version>3.x.y</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>","handlingStrategy":"try-catch","validationCode":"Class.forName(\"io.quarkus.deployment.builditem.AugmentResultBuildItem\"); // probe deployment classes present\n// and verify versions:\n// mvn dependency:tree | grep quarkus-deployment","typeGuard":null,"tryCatchPattern":"try {\n    action = curatedApplication.createAugmentor();\n} catch (RuntimeException e) {\n    Throwable cause = e.getCause(); // ClassNotFoundException / LinkageError\n    cause.printStackTrace();\n}","preventionTips":["Import quarkus-bom so core/deployment versions always match","Clear bootstrap caches after version upgrades","Verify deployment dependencies resolve in isolated classloaders","Probe augmentor class availability before augmentation"],"tags":["augmentation","reflection","classloader","wrapped-exception"],"backgroundTag":"wrapped-runtime-exception","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"}