quarkusio/quarkus · error · IllegalArgumentException

Unrecognized JVM option group prefix ${optionGroupPrefix}

Error message

Unrecognized JVM option group prefix ${optionGroupPrefix}

What it means

When adding a single JVM option, addToGroup looks up the option group prefix and instantiates either a standard or -XX type option via a switch. Any other prefix is unrecognized and throws IllegalArgumentException. Only the two known PROPERTY_GROUP_PREFIX values are supported.

Source

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

    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()) {
            options = new HashMap<>();
        }
        var option = options.computeIfAbsent(optionName, n -> {
            switch (optionGroupPrefix) {
                case MutableStandardJvmOption.PROPERTY_GROUP_PREFIX:
                    return MutableStandardJvmOption.newInstance(optionName);
                case MutableXxJvmOption.PROPERTY_GROUP_PREFIX:
                    return MutableXxJvmOption.newInstance(optionName);
            }
            throw new IllegalArgumentException("Unrecognized JVM option group prefix " + optionGroupPrefix);
        });
        if (!value.isBlank()) {
            option.addValue(value);
        }
        return this;
    }

    JvmOptionsBuilder addAllToGroup(String optionGroupPrefix, String optionName, Collection<String> values) {
        if (options.isEmpty()) {
            options = new HashMap<>();
        }
        var option = options.computeIfAbsent(optionName, n -> {
            switch (optionGroupPrefix) {
                case MutableStandardJvmOption.PROPERTY_GROUP_PREFIX:
                    return MutableStandardJvmOption.newInstance(optionName);
                case MutableXxJvmOption.PROPERTY_GROUP_PREFIX:
                    return MutableXxJvmOption.newInstance(optionName);
            }

View on GitHub (pinned to e1c734241f)

Solutions

  1. Use a supported group prefix: the standard option group or the '-XX' option group ('xx.').
  2. Fix the property key in configuration so the group segment is 'standard.' or 'xx.' as expected.
  3. If a new option kind is genuinely needed, extend the switch with a new Mutable*JvmOption type.

Example fix

// before
builder.addFromQuarkusExtensionProperty("quarkus.jvm-options.x.MaxMetaspaceSize", "256m");
// after
builder.addFromQuarkusExtensionProperty("quarkus.jvm-options.xx.MaxMetaspaceSize", "256m");
Defensive patterns

Strategy: validation

Validate before calling

if (!optionGroupPrefix.equals(MutableStandardJvmOption.PROPERTY_GROUP_PREFIX)
        && !optionGroupPrefix.equals(MutableXxJvmOption.PROPERTY_GROUP_PREFIX)) {
    throw new IllegalArgumentException("Unsupported option group: " + optionGroupPrefix);
}

Type guard

static boolean isKnownOptionGroup(String prefix) {
    return MutableStandardJvmOption.PROPERTY_GROUP_PREFIX.equals(prefix)
        || MutableXxJvmOption.PROPERTY_GROUP_PREFIX.equals(prefix);
}

Try / catch

try {
    builder.addFromQuarkusExtensionProperty(key, value);
} catch (IllegalArgumentException e) {
    if (e.getMessage().startsWith("Unrecognized JVM option group prefix")) {
        LOG.warnf("Skipping JVM option with unknown group: %s", key);
        return;
    }
    throw e;
}

Prevention

When it happens

Trigger: addFromQuarkusExtensionProperty computes an optionGroupPrefix that is neither MutableStandardJvmOption.PROPERTY_GROUP_PREFIX nor MutableXxJvmOption.PROPERTY_GROUP_PREFIX, typically from a typo'd property group segment.

Common situations: Configured group like 'quarkus.jvm-options.xyz.Foo' where 'xyz.' matches no known prefix; refactors renaming group prefixes; typos such as 'x.' instead of 'xx.'.

Related errors


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