quarkusio/quarkus · error · GradleException

Cannot find deployment project for extension ${extensionArti

Error message

Cannot find deployment project for extension ${extensionArtifactId} with artifact coordinates ${deploymentArtifact}

What it means

For extensions detected only via their quarkus-extension.properties descriptor (no quarkus { } configuration), createExtensionDependency reads the deployment-artifact property and tries to find a local Gradle project producing those artifact coordinates via ToolingUtils.findLocalProject. If no local project matches the deployment artifact coordinates, a GradleException is thrown listing the extension and deployment coordinates. This is expected when the deployment artifact is a plain external dependency (not built in this build), but thrown when the tooling believed it should be local.

Source

Thrown at devtools/gradle/gradle-model/src/main/java/io/quarkus/gradle/tooling/dependency/DependencyUtils.java:240

            throw new IllegalArgumentException("both extensionConfiguration and extensionDescriptor are null");
        }

        Project deploymentProject = null;

        if (extensionConfiguration != null) {
            final String deploymentProjectPath = ConfigurationUtils.getDeploymentModule(extensionConfiguration).get();
            deploymentProject = ToolingUtils.findLocalProject(extensionProject, deploymentProjectPath);
            if (deploymentProject == null) {
                throw new GradleException("Cannot find deployment project for extension " + extensionArtifactId + " at path "
                        + deploymentProjectPath);
            }
        } else if (extensionDescriptor.containsKey(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT)) {
            final ArtifactCoords deploymentArtifact = ArtifactCoords
                    .fromString(extensionDescriptor.getProperty(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT));
            deploymentProject = ToolingUtils.findLocalProject(project, deploymentArtifact);

            if (deploymentProject == null) {
                throw new GradleException("Cannot find deployment project for extension " + extensionArtifactId
                        + " with artifact coordinates " + deploymentArtifact);
            }
        }

        final List<Dependency> conditionalDependencies = new ArrayList<>(0);
        final List<Dependency> conditionalDevDependencies = new ArrayList<>(0);
        final List<ArtifactKey> dependencyConditions = new ArrayList<>(0);

        if (extensionConfiguration != null) {
            collectConditionalDeps(project, ConfigurationUtils.getConditionalDependencies(extensionConfiguration),
                    conditionalDependencies);
            collectConditionalDeps(project, ConfigurationUtils.getConditionalDevDependencies(extensionConfiguration),
                    conditionalDevDependencies);

            final ListProperty<String> dependencyConditionsProp = ConfigurationUtils
                    .getDependencyConditions(extensionConfiguration);
            if (dependencyConditionsProp.isPresent()) {
                for (String rawCond : dependencyConditionsProp.get()) {

View on GitHub (pinned to e1c734241f)

Solutions

  1. Update META-INF/quarkus-extension.properties so deployment-artifact matches the actual deployment module's group:artifact:version
  2. Apply the io.quarkus.extension plugin and set quarkus { deploymentModule } so the path-based lookup is used instead of coordinates matching
  3. Verify the deployment project's group/name in build.gradle match the coordinates in the descriptor
  4. Clean and rebuild the extension project so the packaged descriptor is regenerated from current settings
  5. Run ./gradlew projects and compare group:name of the deployment project with the coordinates in the error

Example fix

// before (stale descriptor)
deployment-artifact=com.example:old-name-deployment:1.0
// after
deployment-artifact=com.example:new-name-deployment:1.0
Defensive patterns

Strategy: validation

Validate before calling

String coords = descriptor.getProperty("deployment-artifact");
if (coords != null) {
    var c = ArtifactCoords.fromString(coords);
    if (project.findProject(":" + c.getName()) == null) {
        logger.warn("deployment-artifact " + coords + " has no matching local project");
    }
}

Try / catch

try {
    var dep = DependencyUtils.getProjectExtensionDependencyOrNull(project, path, buildPath);
} catch (GradleException e) {
    if (e.getMessage().contains("with artifact coordinates")) {
        // fix deployment-artifact in quarkus-extension.properties or set quarkus{deploymentModule}
    } else throw e;
}

Prevention

When it happens

Trigger: getExtensionInfoOrNull -> createExtensionDependency on a project with META-INF/quarkus-extension.properties whose deployment-artifact property points at coordinates that do not match any local project's group:name — often after changing group/artifact IDs or when the descriptor is stale.

Common situations: Renaming an extension's groupId or artifactId without regenerating the descriptor; copying a descriptor from another extension; a multi-module setup where the deployment module version differs from the published coordinates in the descriptor; included builds where findLocalProject cannot match composite project artifacts.

Related errors


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