{"record":{"id":"1850e10453df2ec7","repo":"quarkusio/quarkus","slug":"buildpack-build-unable-to-determine-project-dir","errorCode":null,"errorMessage":"Buildpack build unable to determine project dir","messagePattern":"Buildpack build unable to determine project dir","errorType":"error_code","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"extensions/container-image/container-image-buildpack/deployment/src/main/java/io/quarkus/container/image/buildpack/deployment/BuildpackProcessor.java","lineNumber":149,"sourceCode":"        }\n\n        log.info(\"Starting (local) container image build for native binary using buildpack.\");\n        String targetImageName = runBuildpackBuild(buildpackConfig, containerImage, containerImageConfig, buildContainerImage,\n                pushContainerImage,\n                outputTarget, true /* isNative */);\n\n        artifactResultProducer.produce(new ArtifactResultBuildItem(null, \"native-container\",\n                Collections.singletonMap(\"container-image\", targetImageName)));\n        containerImageBuilder.produce(new ContainerImageBuilderBuildItem(BUILDPACK));\n    }\n\n    private Map<ProjectDirs, Path> getPaths(OutputTargetBuildItem outputTarget) {\n\n        Path targetDirectory = outputTarget.getOutputDirectory();\n\n        Map.Entry<Path, Path> mainSourcesRoot = findMainSourcesRoot(targetDirectory);\n        if (mainSourcesRoot == null) {\n            throw new RuntimeException(\"Buildpack build unable to determine project dir\");\n        }\n        Path sourceRoot = mainSourcesRoot.getKey();\n        Path projectRoot = mainSourcesRoot.getValue();\n        if (!projectRoot.toFile().exists() || !sourceRoot.toFile().exists()) {\n            throw new RuntimeException(\"Buildpack build unable to verify project dir\");\n        }\n\n        Map<ProjectDirs, Path> result = new HashMap<>();\n        result.put(ProjectDirs.ROOT, projectRoot);\n        result.put(ProjectDirs.SOURCE, sourceRoot);\n        result.put(ProjectDirs.TARGET, targetDirectory);\n        return result;\n    }\n\n    private String runBuildpackBuild(BuildpackConfig buildpackConfig,\n            ContainerImageInfoBuildItem containerImage,\n            ContainerImageConfig containerImageConfig,\n            boolean buildContainerImage,","sourceCodeStart":131,"sourceCodeEnd":167,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/container-image/container-image-buildpack/deployment/src/main/java/io/quarkus/container/image/buildpack/deployment/BuildpackProcessor.java#L131-L167","documentation":"BuildpackProcessor.getPaths cannot locate the project directory when findMainSourcesRoot fails to map the build output directory back to a sources root/project root. Buildpack needs the project root to locate buildpack configuration files, so the build aborts with a RuntimeException.","triggerScenarios":"The outputTarget output directory is not inside a recognizable project sources tree (e.g. custom output directory, unusual project layout, or build run outside a standard Maven/Gradle structure).","commonSituations":"Overriding the build output directory; multi-module projects with non-standard layouts; running the image build from a detached workspace where sources don't exist.","solutions":["Build with the standard Maven/Gradle target directory layout","Check findMainSourcesRoot expectations: output dir must be under a module containing a source root (src/main/...)","Ensure the project is built in place so sources and target directories are colocated"],"exampleFix":"// before\n./mvnw package -Dquarkus.package.output-directory=/tmp/out -Dquarkus.container-image.build=true\n// after\n./mvnw package -Dquarkus.container-image.build=true","handlingStrategy":"validation","validationCode":"Path target = Path.of(\"target\");\nif (!Files.isDirectory(target.resolve(\"..\", \"src\", \"main\"))) {\n    throw new IllegalStateException(\"build must run from a standard project layout\");\n}","typeGuard":null,"tryCatchPattern":"try {\n    imageBuild();\n} catch (RuntimeException e) {\n    if (e.getMessage().contains(\"unable to determine project dir\")) {\n        // rerun from the standard project checkout\n    } else { throw e; }\n}","preventionTips":["Don't override the build output directory when building container images","Run image builds from the project root with the standard Maven/Gradle layout"],"tags":["buildpack","container-image","project-layout"],"backgroundTag":"project-dir-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"}