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

  1. 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=...)
  2. Exclude the offending non-extension artifact from the rule's scan (adjust its include filters)
  3. Rebuild the extension with the quarkus-extension packaging so the extension-codegen writes the deployment-artifact property
  4. 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

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


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