{"record":{"id":"ddbf6bd99b069998","repo":"quarkusio/quarkus","slug":"cannot-find-deployment-project-for-extension-ext","errorCode":null,"errorMessage":"Cannot find deployment project for extension ${extensionArtifactId} at path ${deploymentProjectPath}","messagePattern":"Cannot find deployment project for extension (.+?) at path (.+?)","errorType":"exception","errorClass":"GradleException","httpStatus":null,"severity":"error","filePath":"devtools/gradle/gradle-model/src/main/java/io/quarkus/gradle/tooling/dependency/DependencyUtils.java","lineNumber":231,"sourceCode":"\n    private static ProjectExtensionDependency createExtensionDependency(\n            Project project,\n            ModuleVersionIdentifier extensionArtifactId,\n            Project extensionProject,\n            @Nullable Object extensionConfiguration,\n            @Nullable Properties extensionDescriptor,\n            boolean isIncludedBuild) {\n        if (extensionConfiguration == null && extensionDescriptor == null) {\n            throw new IllegalArgumentException(\"both extensionConfiguration and extensionDescriptor are null\");\n        }\n\n        Project deploymentProject = null;\n\n        if (extensionConfiguration != null) {\n            final String deploymentProjectPath = ConfigurationUtils.getDeploymentModule(extensionConfiguration).get();\n            deploymentProject = ToolingUtils.findLocalProject(extensionProject, deploymentProjectPath);\n            if (deploymentProject == null) {\n                throw new GradleException(\"Cannot find deployment project for extension \" + extensionArtifactId + \" at path \"\n                        + deploymentProjectPath);\n            }\n        } else if (extensionDescriptor.containsKey(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT)) {\n            final ArtifactCoords deploymentArtifact = ArtifactCoords\n                    .fromString(extensionDescriptor.getProperty(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT));\n            deploymentProject = ToolingUtils.findLocalProject(project, deploymentArtifact);\n\n            if (deploymentProject == null) {\n                throw new GradleException(\"Cannot find deployment project for extension \" + extensionArtifactId\n                        + \" with artifact coordinates \" + deploymentArtifact);\n            }\n        }\n\n        final List<Dependency> conditionalDependencies = new ArrayList<>(0);\n        final List<Dependency> conditionalDevDependencies = new ArrayList<>(0);\n        final List<ArtifactKey> dependencyConditions = new ArrayList<>(0);\n\n        if (extensionConfiguration != null) {","sourceCodeStart":213,"sourceCodeEnd":249,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/devtools/gradle/gradle-model/src/main/java/io/quarkus/gradle/tooling/dependency/DependencyUtils.java#L213-L249","documentation":"When a local extension project's quarkus { } configuration declares its deployment module (ConfigurationUtils.getDeploymentModule), createExtensionDependency resolves that path to a local Project via ToolingUtils.findLocalProject. If the declared deployment project path cannot be found in the reachable build (wrong path, project not included, or lives in an unlinked included build), a GradleException is thrown naming both the extension artifact and the missing deployment path.","triggerScenarios":"getExtensionInfoOrNull -> createExtensionDependency for an extension project whose quarkus.deploymentModule path (e.g. ':my-ext-deployment') is not a project visible to findLocalProject (not in settings.gradle includes, or wrong path in an included build).","commonSituations":"Typos in the deploymentModule path; deployment subproject removed/renamed while the runtime project's config still references it; extension projects in included builds where the deployment project is in a different build; forgetting the include in settings.gradle.","solutions":["Check the deploymentModule path in the extension project's build.gradle matches an actual project (include it in settings.gradle if missing)","Verify the deployment project exists and is named e.g. <ext>-deployment in the same build","If the extension lives in an included build, ensure both runtime and deployment projects are in that included build and the build is linked properly","Run ./gradlew projects to list resolvable project paths and compare with the error message","Clear configuration cache / stop daemon if the project was recently renamed"],"exampleFix":"// before\nquarkus { deploymentModule = ':my-ext-deployment' } // project does not exist\n// after (settings.gradle)\ninclude ':my-ext-deployment'\n// build.gradle\nquarkus { deploymentModule = ':my-ext-deployment' }","handlingStrategy":"validation","validationCode":"String depPath = extProject.getExtensions()\n    .findByName(\"quarkus\") != null ? getDeploymentModulePath(extProject) : null;\nif (depPath != null && extProject.getRootProject().findProject(depPath) == null) {\n    throw new IllegalStateException(\"deploymentModule path not found: \" + depPath);","typeGuard":null,"tryCatchPattern":"try {\n    var dep = DependencyUtils.getProjectExtensionDependencyOrNull(project, path, buildPath);\n} catch (GradleException e) {\n    if (e.getMessage().startsWith(\"Cannot find deployment project for extension\")) {\n        // check settings.gradle includes and the deploymentModule path\n    } else throw e;\n}","preventionTips":["Verify the deploymentModule path with ./gradlew projects after any rename","Always include the -deployment subproject in settings.gradle","Keep deployment projects in the same build (or same included build) as the runtime project","Update the quarkus { } block whenever deployment project paths change"],"tags":["gradle","extension","deployment-module","project-lookup"],"backgroundTag":"quarkus-deployment-module-not-found","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}