{"record":{"id":"98d694411c8c2edb","repo":"quarkusio/quarkus","slug":"failed-to-determine-jvm-option-group-given-propert","errorCode":null,"errorMessage":"Failed to determine JVM option group given property name ${propName}","messagePattern":"Failed to determine JVM option group given property name (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/JvmOptionsBuilder.java","lineNumber":23,"sourceCode":"import java.util.HashMap;\nimport java.util.List;\nimport java.util.Map;\n\nimport io.quarkus.bootstrap.BootstrapConstants;\n\n/**\n * JVM arguments builder\n */\npublic class JvmOptionsBuilder {\n\n    public static boolean isExtensionDevModeJvmOptionProperty(String name) {\n        return name.startsWith(BootstrapConstants.EXT_DEV_MODE_JVM_OPTION_PREFIX);\n    }\n\n    private static String getGroupPrefixForPropertyName(String propName) {\n        final int i = propName.indexOf('.', BootstrapConstants.EXT_DEV_MODE_JVM_OPTION_PREFIX.length() + 1);\n        if (i < 0) {\n            throw new IllegalArgumentException(\"Failed to determine JVM option group given property name \" + propName);\n        }\n        return propName.substring(BootstrapConstants.EXT_DEV_MODE_JVM_OPTION_PREFIX.length(), i + 1);\n    }\n\n    private Map<String, MutableBaseJvmOption<?>> options = Map.of();\n\n    JvmOptionsBuilder() {\n    }\n\n    public void addFromQuarkusExtensionProperty(String propertyName, String value) {\n        final String groupPrefix = getGroupPrefixForPropertyName(propertyName);\n        final String optionName = propertyName\n                .substring(BootstrapConstants.EXT_DEV_MODE_JVM_OPTION_PREFIX.length() + groupPrefix.length());\n        addToGroup(groupPrefix, optionName, value);\n    }\n\n    private JvmOptionsBuilder addToGroup(String optionGroupPrefix, String optionName, String value) {\n        if (options.isEmpty()) {","sourceCodeStart":5,"sourceCodeEnd":41,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/JvmOptionsBuilder.java#L5-L41","documentation":"JvmOptionsBuilder.getGroupPrefixForPropertyName derives the JVM option group prefix from a quarkus extension JVM option property name by locating the '.' after the known prefix. If no dot is present, the property name is malformed and IllegalArgumentException is thrown.","triggerScenarios":"Calling groupPrefix (via addFromQuarkusExtensionProperty) with a property starting with the dev-mode JVM option prefix but containing no subsequent dot, e.g. 'quarkus.jvm-options' style key without a group segment.","commonSituations":"Misconfigured quarkus.* jvm option property missing the group part ('quarkus.jvm-options.xx.' vs 'quarkus.jvm-options.'), typos in extension property keys, hand-written config in application.properties.","solutions":["Supply the property name with its full group, e.g. '<prefix>standard.HeapDumpOnOutOfMemoryError' instead of '<prefix>HeapDumpOnOutOfMemoryError'.","Validate the property key format before passing it to the builder.","Check application.properties / build config for truncated JVM option keys."],"exampleFix":"// before\nbuilder.addFromQuarkusExtensionProperty(\"quarkus.jvm-options\", \"-XX:+HeapDumpOnOutOfMemoryError\");\n// after\nbuilder.addFromQuarkusExtensionProperty(\"quarkus.jvm-options.xx.HeapDumpOnOutOfMemoryError\", \"+HeapDumpOnOutOfMemoryError\");","handlingStrategy":"validation","validationCode":"String PREFIX = BootstrapConstants.EXT_DEV_MODE_JVM_OPTION_PREFIX;\nif (!propName.startsWith(PREFIX)\n        || propName.indexOf('.', PREFIX.length() + 1) < 0) {\n    throw new IllegalArgumentException(\"Malformed JVM option property: \" + propName);\n}","typeGuard":"static boolean hasOptionGroup(String propName) {\n    String p = BootstrapConstants.EXT_DEV_MODE_JVM_OPTION_PREFIX;\n    return propName.startsWith(p) && propName.indexOf('.', p.length() + 1) >= 0;\n}","tryCatchPattern":"try {\n    builder.addFromQuarkusExtensionProperty(propName, value);\n} catch (IllegalArgumentException e) {\n    throw new IllegalStateException(\"Missing group in JVM option property: \" + propName, e);\n}","preventionTips":["Always include a group segment after the jvm-options prefix in property keys.","Validate property key shapes before feeding them to JvmOptionsBuilder."],"tags":["jvm-options","configuration","property-name"],"backgroundTag":"malformed-property-name","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"}