quarkusio/quarkus · error · IllegalStateException
deployment-artifact artifact not found in ${EXT_PROPERTIES_P
Error message
deployment-artifact artifact not found in ${EXT_PROPERTIES_PATH} from ${artifactFile} What it means
After successfully loading quarkus-extension.properties, parseDeploymentGAV expects the 'deployment-artifact' key containing the GAV of the matching -deployment artifact. If the properties file lacks that key, it throws IllegalStateException 'deployment-artifact artifact not found in <path> from <artifactFile>'. This indicates the artifact is not a properly generated Quarkus extension runtime jar.
Source
Thrown at independent-projects/enforcer-rules/src/main/java/io/quarkus/enforcer/DeploymentDependencyRuleSupport.java:127
throw new UncheckedIOException("Failed to read " + EXT_PROPERTIES_PATH + " from " + artifactFile, e);
}
} else {
try (ZipFile zipFile = new ZipFile(artifactFile)) {
ZipEntry entry = zipFile.getEntry(EXT_PROPERTIES_PATH);
if (entry == null) {
return Optional.empty();
}
try (InputStreamReader isr = new InputStreamReader(zipFile.getInputStream(entry), StandardCharsets.UTF_8)) {
extProperties.load(isr);
}
} catch (IOException e) {
throw new UncheckedIOException("Failed to read " + EXT_PROPERTIES_PATH + " from " + artifactFile, e);
}
}
String deploymentGAV = extProperties.getProperty("deployment-artifact");
if (deploymentGAV == null) {
throw new IllegalStateException(
"deployment-artifact artifact not found in " + EXT_PROPERTIES_PATH + " from " + artifactFile);
}
return Optional.of(deploymentGAV);
}
protected boolean isCheckRequired(MavenProject project) {
return true;
}
}
View on GitHub (pinned to e1c734241f)
Solutions
- Verify the jar is a genuine Quarkus runtime extension built with the quarkus-extension packaging (unzip -p jar quarkus-extension.properties should show deployment-artifact=...)
- Exclude the offending non-extension artifact from the rule's scan (adjust its include filters)
- Rebuild the extension with the quarkus-extension packaging so the extension-codegen writes the deployment-artifact property
- Remove a shadowed/uber jar from the dependency set that replaced the original artifact
Example fix
// before: rule scans a non-Quarkus jar that carries a stray properties file <includes><include>com.example:*</include></includes> // after: restrict to real Quarkus runtime artifacts <includes><include>io.quarkus:quarkus-*</include></includes>
Defensive patterns
Strategy: validation
Validate before calling
// Shell: confirm the jar really is a Quarkus runtime extension unzip -p quarkus-foo-1.0.jar quarkus-extension.properties | grep '^deployment-artifact=' \ || echo "not a Quarkus runtime extension jar"
Try / catch
try {
Optional<String> gav = support.getDeploymentGAV(artifact);
} catch (IllegalStateException e) {
if (e.getMessage().startsWith("deployment-artifact artifact not found")) {
getLog().warn("Skipping non-Quarkus artifact: " + artifact);
} else throw e;
} Prevention
- Scope the rule's includes to io.quarkus:quarkus-* runtime artifacts only
- Build extensions with the quarkus-extension packaging so deployment-artifact is generated
- Do not shade/repackage Quarkus runtime jars — repackaging drops quarkus-extension.properties entries
- Audit the dependency set for jars that shadow Quarkus artifacts
When it happens
Trigger: parseDeploymentGAV is called on an artifact whose quarkus-extension.properties exists but has no 'deployment-artifact' entry — e.g. a hand-made or third-party jar with a quarkus-extension.properties from another purpose, or a Quarkus runtime jar built without the extension packaging codegen.
Common situations: A non-extension artifact accidentally matching the rule's filter (wrong groupId/artifact pattern in enforcer config); a locally patched Quarkus jar built without the quarkus-extension packaging; classpath polluted by a repackaged/uber jar that dropped the property.
Related errors
- referenceArtifact must be configured (e.g., 'org.hibernate.o
- referenceArtifact must be in format 'groupId:artifactId:vers
- Unsupported value: ${value}
- Unsupported format: ${format}
- Either the `extension` or `extensions` parameter must be set
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/48c0865536b34d35.
Report an issue: GitHub.