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
- Regenerate the extension jar using standard quarkus-maven-plugin build so the descriptor includes deployment-artifact
- Manually add deployment-artifact=<G:A:C:P:V> to quarkus-extension.properties inside the jar
- Verify the extension's extension-descriptor mojo ran during its build
- 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
- Build extensions only with quarkus-maven-plugin extension-descriptor goal
- Inspect published jars for descriptor completeness before depending on them
- Pin to official extension releases
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
- Could not determine constructor for ${theClass} add @Inject
- Cannot inject object of type ${param}
- Failed to prepare injector constructor ${injectCtor} of byte
- Unsupported value: ${value}
- Cannot create new DeferredArrayStoreParameter after array ha
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/6c3907f1dd52832f.
Report an issue: GitHub.