quarkusio/quarkus · error · IllegalStateException

Quarkus extension runtime artifact ${a} is missing ${Bootstr

Error message

Quarkus extension runtime artifact ${a} is missing ${BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT} property in its ${BootstrapConstants.DESCRIPTOR_PATH}

What it means

Every Quarkus runtime extension jar must contain a quarkus-extension.properties descriptor with a deployment-artifact property pointing to its deployment counterpart. When the mojo looks up the deployment artifact for a runtime extension artifact and the property is absent, it throws this IllegalStateException.

Source

Thrown at independent-projects/extension-maven-plugin/src/main/java/io/quarkus/maven/ExtensionDescriptorMojo.java:1114

        for (DependencyNode child : node.getChildren()) {
            visitRuntimeDep(root, currentNode, currentId, child);
        }
    }

    private ArtifactKey getDeploymentKey(org.eclipse.aether.artifact.Artifact a) throws MojoExecutionException {
        final org.eclipse.aether.artifact.Artifact deployment = getDeploymentArtifact(a);
        return deployment == null ? null : toKey(deployment);
    }

    private org.eclipse.aether.artifact.Artifact getDeploymentArtifact(org.eclipse.aether.artifact.Artifact a)
            throws MojoExecutionException {
        final Properties props = getExtensionDescriptor(a, false);
        if (props == null) {
            return null;
        }
        final String deploymentStr = props.getProperty(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT);
        if (deploymentStr == null) {
            throw new IllegalStateException("Quarkus extension runtime artifact " + a + " is missing "
                    + BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT + " property in its "
                    + BootstrapConstants.DESCRIPTOR_PATH);
        }
        return DependencyUtils.toArtifact(deploymentStr);
    }

    private Properties getExtensionDescriptor(org.eclipse.aether.artifact.Artifact a, boolean packaged) {
        final File f;
        try {
            f = resolve(a);
        } catch (Exception e) {
            getLog().warn("Failed to resolve " + a);
            return null;
        }
        // if it hasn't been packaged yet, we skip it, we are not packaging yet
        if (!a.getExtension().equals(ArtifactCoords.TYPE_JAR) || packaged && !isJarFile(f)) {
            return null;
        }

View on GitHub (pinned to e1c734241f)

Solutions

  1. Regenerate the extension jar using standard quarkus-maven-plugin build so the descriptor includes deployment-artifact
  2. Manually add deployment-artifact=<G:A:C:P:V> to quarkus-extension.properties inside the jar
  3. Verify the extension's extension-descriptor mojo ran during its build
  4. Check that you depend on the correct, officially published extension version

Example fix

# before (descriptor missing key)
quarkus-extension.name=my-ext
# after
quarkus-extension.name=my-ext
deployment-artifact=my.org:my-ext-deployment::jar:1.0.0
Defensive patterns

Strategy: validation

Validate before calling

unzip -p my-ext.jar META-INF/quarkus-extension.properties | grep deployment-artifact

Prevention

When it happens

Trigger: A jar on the dependency classpath is detected as a Quarkus extension (has quarkus-extension.properties) but the properties lack the deployment-artifact key — typically a hand-crafted or malformed extension jar.

Common situations: Manually built extension jars missing descriptor entries; custom annotation processors generating incomplete descriptors; old/mismatched extension artifacts produced by non-standard tooling.

Related errors


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