quarkusio/quarkus · error · IllegalArgumentException

Failed to determine JVM option group given property name ${p

Error message

Failed to determine JVM option group given property name ${propName}

What it means

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.

Source

Thrown at independent-projects/bootstrap/app-model/src/main/java/io/quarkus/bootstrap/model/JvmOptionsBuilder.java:23

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import io.quarkus.bootstrap.BootstrapConstants;

/**
 * JVM arguments builder
 */
public class JvmOptionsBuilder {

    public static boolean isExtensionDevModeJvmOptionProperty(String name) {
        return name.startsWith(BootstrapConstants.EXT_DEV_MODE_JVM_OPTION_PREFIX);
    }

    private static String getGroupPrefixForPropertyName(String propName) {
        final int i = propName.indexOf('.', BootstrapConstants.EXT_DEV_MODE_JVM_OPTION_PREFIX.length() + 1);
        if (i < 0) {
            throw new IllegalArgumentException("Failed to determine JVM option group given property name " + propName);
        }
        return propName.substring(BootstrapConstants.EXT_DEV_MODE_JVM_OPTION_PREFIX.length(), i + 1);
    }

    private Map<String, MutableBaseJvmOption<?>> options = Map.of();

    JvmOptionsBuilder() {
    }

    public void addFromQuarkusExtensionProperty(String propertyName, String value) {
        final String groupPrefix = getGroupPrefixForPropertyName(propertyName);
        final String optionName = propertyName
                .substring(BootstrapConstants.EXT_DEV_MODE_JVM_OPTION_PREFIX.length() + groupPrefix.length());
        addToGroup(groupPrefix, optionName, value);
    }

    private JvmOptionsBuilder addToGroup(String optionGroupPrefix, String optionName, String value) {
        if (options.isEmpty()) {

View on GitHub (pinned to e1c734241f)

Solutions

  1. Supply the property name with its full group, e.g. '<prefix>standard.HeapDumpOnOutOfMemoryError' instead of '<prefix>HeapDumpOnOutOfMemoryError'.
  2. Validate the property key format before passing it to the builder.
  3. Check application.properties / build config for truncated JVM option keys.

Example fix

// before
builder.addFromQuarkusExtensionProperty("quarkus.jvm-options", "-XX:+HeapDumpOnOutOfMemoryError");
// after
builder.addFromQuarkusExtensionProperty("quarkus.jvm-options.xx.HeapDumpOnOutOfMemoryError", "+HeapDumpOnOutOfMemoryError");
Defensive patterns

Strategy: validation

Validate before calling

String PREFIX = BootstrapConstants.EXT_DEV_MODE_JVM_OPTION_PREFIX;
if (!propName.startsWith(PREFIX)
        || propName.indexOf('.', PREFIX.length() + 1) < 0) {
    throw new IllegalArgumentException("Malformed JVM option property: " + propName);
}

Type guard

static boolean hasOptionGroup(String propName) {
    String p = BootstrapConstants.EXT_DEV_MODE_JVM_OPTION_PREFIX;
    return propName.startsWith(p) && propName.indexOf('.', p.length() + 1) >= 0;
}

Try / catch

try {
    builder.addFromQuarkusExtensionProperty(propName, value);
} catch (IllegalArgumentException e) {
    throw new IllegalStateException("Missing group in JVM option property: " + propName, e);
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/98d694411c8c2edb. Report an issue: GitHub.