{"record":{"id":"93b1fa0ee24fd7b7","repo":"quarkusio/quarkus","slug":"unable-to-render-config-section-for-section-sec","errorCode":null,"errorMessage":"Unable to render config section for section: ${section} in extension: ${extension}","messagePattern":"Unable to render config section for section: (.+?) in extension: (.+?)","errorType":"exception","errorClass":"MojoExecutionException","httpStatus":null,"severity":"error","filePath":"devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/GenerateConfigDocMojo.java","lineNumber":216,"sourceCode":"\n            for (ConfigSection generatedConfigSection : extensionConfigSectionsEntry.getValue()) {\n                if (generatedConfigSection.getNonDeprecatedItems().isEmpty()) {\n                    continue;\n                }\n\n                Path configSectionPath = resolvedTargetDirectory.resolve(String.format(CONFIG_ROOT_FILE_FORMAT,\n                        extension.artifactId(), cleanSectionPath(generatedConfigSection.getPath().property()),\n                        normalizedFormat.getExtension()));\n                String summaryTableId = formatter\n                        .toAnchor(extension.artifactId() + \"_\" + generatedConfigSection.getPath().property());\n                Context context = new Context(summaryTableId, false);\n\n                try {\n                    Files.writeString(configSectionPath,\n                            generateConfigReference(quteEngine, context, extension, generatedConfigSection,\n                                    \"_\" + generatedConfigSection.getPath().property(), false));\n                } catch (Exception e) {\n                    throw new MojoExecutionException(\n                            \"Unable to render config section for section: \" + generatedConfigSection.getPath().property()\n                                    + \" in extension: \" + extension,\n                            e);\n                }\n            }\n        }\n\n        if (generateAllConfig) {\n            // we generate the file centralizing all the config properties\n            try {\n                Path allConfigPath = resolvedTargetDirectory.resolve(String.format(ALL_CONFIG_FILE_FORMAT,\n                        normalizedFormat.getExtension()));\n\n                Context context = new Context(\"all-config\", true);\n\n                Files.writeString(allConfigPath, generateAllConfig(quteEngine, context, mergedModel.getConfigRoots()));\n            } catch (Exception e) {\n                throw new MojoExecutionException(\"Unable to render all config\", e);","sourceCodeStart":198,"sourceCodeEnd":234,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/devtools/config-doc-maven-plugin/src/main/java/io/quarkus/maven/config/doc/GenerateConfigDocMojo.java#L198-L234","documentation":"GenerateConfigDocMojo wraps any exception thrown while rendering a per-extension generated config section template with Qute into a MojoExecutionException naming the section and extension. The original cause (usually a Qute template evaluation error) is attached as the cause.","triggerScenarios":"During execute(), when Files.writeString(generateConfigReference(...)) for a generated ConfigSection throws — typically a Qute template evaluation failure, missing anchor data, or an I/O error writing the section file.","commonSituations":"A generated config section references a template variable that does not exist; output directory is not writable; a section path contains characters invalid for the target filesystem.","solutions":["Inspect the cause chain of the MojoExecutionException for the actual Qute/template error","Check the output directory is writable and the section file path is valid on your OS","Regenerate with a clean target directory (mvn clean) and retry"],"exampleFix":"// before\nmvn generate-config-doc -DtargetDirectory=/read-only/out\n// after\nmvn clean generate-config-doc -DtargetDirectory=./target/generated-docs","handlingStrategy":"try-catch","validationCode":"// Ensure output dir is writable before invoking the plugin\nPath dir = Paths.get(targetDirectory);\nif (Files.exists(dir)) {\n    assert Files.isWritable(dir);\n}","typeGuard":null,"tryCatchPattern":"try {\n    mojo.execute();\n} catch (MojoExecutionException e) {\n    Throwable cause = e.getCause();\n    logger.error(\"Section render failed: \" + e.getMessage(), cause);\n}","preventionTips":["Run with a clean, writable target directory","Keep Qute templates and plugin version in sync","Avoid exotic characters in config section paths"],"tags":["maven","qute","template-rendering"],"backgroundTag":"template-render-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"}