quarkusio/quarkus · error · IllegalStateException

Value is not set for %s.%s(). Most probably an older version

Error message

Value is not set for %s.%s(). Most probably an older version of Jandex was used to index an application dependency. Make sure that Jandex 2.1+ is used.

What it means

When generating an annotation literal, each annotation member must have a value — either present in the AnnotationInstance or a declared default. If neither exists, Arc throws IllegalStateException advising that a Jandex older than 2.1 likely produced the index (older versions did not record default values).

Source

Thrown at independent-projects/arc/processor/src/main/java/io/quarkus/arc/processor/AnnotationLiteralProcessor.java:110

        }

        AnnotationLiteralClassInfo literal = cache.getValue(new CacheKey(annotationClass));

        ClassDesc generatedClass = ClassDesc.of(literal.generatedClassName);

        if (literal.annotationMembers().isEmpty()) {
            return bc.getStaticField(FieldDesc.of(generatedClass, "INSTANCE", generatedClass));
        }

        Expr[] ctorArgs = new Expr[literal.annotationMembers().size()];
        int argIndex = 0;
        for (MethodInfo annotationMember : literal.annotationMembers()) {
            AnnotationValue value = annotationInstance.value(annotationMember.name());
            if (value == null) {
                value = annotationMember.defaultValue();
            }
            if (value == null) {
                throw new IllegalStateException(String.format(
                        "Value is not set for %s.%s(). Most probably an older version of Jandex was used to index an application dependency. Make sure that Jandex 2.1+ is used.",
                        annotationMember.declaringClass().name(), annotationMember.name()));
            }
            Expr valueExpr = loadValue(bc, literal, annotationMember, value);
            ctorArgs[argIndex] = valueExpr;

            argIndex++;
        }

        ConstructorDesc ctor = ConstructorDesc.of(generatedClass, literal.annotationMembers()
                .stream()
                .map(it -> classDescOf(it.returnType()))
                .toArray(ClassDesc[]::new));
        return bc.new_(ctor, ctorArgs);
    }

    /**
     * Generates a bytecode sequence to load given annotation member value.

View on GitHub (pinned to e1c734241f)

Solutions

  1. Upgrade Jandex to 2.1+ (and matching smallrye/jandex artifacts) in the build
  2. Re-index the offending dependency (mvn clean install with jandex plugin)
  3. Give the annotation member a default value or supply an explicit value at usage

Example fix

// before
<dependency> <groupId>io.smallrye</groupId> <artifactId>jandex</artifactId> <version>2.0.3.Final</version> </dependency>
// after
<dependency> <groupId>io.smallrye</groupId> <artifactId>jandex</artifactId> <version>3.x.x</version> </dependency>
Defensive patterns

Strategy: validation

Validate before calling

// verify Jandex version
if (Version.getString().startsWith("2.0")) throw new IllegalStateException("upgrade Jandex");

Prevention

When it happens

Trigger: Annotation member with no explicit value on the usage site AND no defaultValue() in the Jandex index, encountered during literal generation in create().

Common situations: Stale or old Jandex version on the build classpath indexing an application dependency; dependency indexed with outdated tooling producing missing defaultValue metadata; annotation modified after indexing without reindex.

Related errors


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