{"record":{"id":"c4e84b28822dcf6e","repo":"quarkusio/quarkus","slug":"key-value-is-required","errorCode":null,"errorMessage":"'${key}' value is required.","messagePattern":"'(.+?)' value is required\\.","errorType":"validation","errorClass":"QuarkusCommandException","httpStatus":null,"severity":"error","filePath":"independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/CreateExtension.java","lineNumber":472,"sourceCode":"                return LayoutType.OTHER_PLATFORM;\n            }\n        }\n        if (isQuarkiverseGroupId(groupId))\n            return LayoutType.QUARKIVERSE;\n        return LayoutType.STANDALONE;\n    }\n\n    public static boolean isQuarkiverseGroupId(String groupId) {\n        return groupId != null && groupId.contains(DEFAULT_QUARKIVERSE_PARENT_GROUP_ID);\n    }\n\n    public static String extractQuarkiverseExtensionId(String groupId) {\n        return groupId.replace(DEFAULT_QUARKIVERSE_PARENT_GROUP_ID + \".\", \"\");\n    }\n\n    private void ensureRequiredStringData(QuarkusExtensionData key) throws QuarkusCommandException {\n        if (!data.containsNonEmptyStringForKey(key)) {\n            throw new QuarkusCommandException(\"'\" + key.toString() + \"' value is required.\");\n        }\n    }\n\n    private void ensureRequiredStringData(QuarkusExtensionData key, String detectedValue) throws QuarkusCommandException {\n        if (!data.containsNonEmptyStringForKey(key)) {\n            if (isEmpty(detectedValue)) {\n                throw new QuarkusCommandException(\n                        \"You need to define  '\" + key.toString() + \"' because it was not found in the project hierarchy.\");\n            }\n            data.putIfNonEmptyString(key, detectedValue);\n        }\n    }\n\n    static String resolveExtensionPackage(String groupId, String artifactId) {\n        final Deque<String> segments = new ArrayDeque<>();\n        for (String segment : groupId.split(\"[.\\\\-]+\")) {\n            if (segments.isEmpty() || !segments.peek().equals(segment)) {\n                segments.add(segment);","sourceCodeStart":454,"sourceCodeEnd":490,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/CreateExtension.java#L454-L490","documentation":"CreateExtension requires certain QuarkusExtensionData values (e.g. extension-id, group-id, version) to be present as non-empty strings. ensureRequiredStringData throws this QuarkusCommandException when a required key is missing or empty in the provided extension data.","triggerScenarios":"Calling prepare on CreateExtension without a non-empty string for a required QuarkusExtensionData key, with no detected fallback value available.","commonSituations":"Non-interactive runs lacking required answers; data map keys misspelled or empty strings passed; CI scripts not supplying extension-id/extension-name.","solutions":["Supply all required data keys as non-empty strings before calling prepare","Run interactively so required values are prompted and filled","Check QuarkusExtensionData enum values for the exact required key names"],"exampleFix":"// before\nMap<String, Object> data = Map.of(\"extension-id\", \"\"); // empty\n// after\nMap<String, Object> data = Map.of(\"extension-id\", \"my-ext\", \"group-id\", \"org.acme\");","handlingStrategy":"validation","validationCode":"for (QuarkusExtensionData key : List.of(QuarkusExtensionData.EXTENSION_ID, QuarkusExtensionData.GROUP_ID)) {\n    if (!data.containsNonEmptyStringForKey(key)) throw new IllegalStateException(key + \" must be a non-empty string\");\n}","typeGuard":null,"tryCatchPattern":"try { createExtension.prepare(); } catch (QuarkusCommandException e) { if (e.getMessage().endsWith(\"value is required.\")) { promptUserForMissingKeys(); } }","preventionTips":["Populate all required QuarkusExtensionData keys before prepare","Prefer interactive mode so prompts collect required values","Guard CI scripts with explicit flags for every required option"],"tags":["validation","missing-parameter","extension-creation"],"backgroundTag":"missing-required-argument","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"}