{"record":{"id":"3c92cea7a5a00342","repo":"quarkusio/quarkus","slug":"failed-to-load-extension-descriptor-at","errorCode":null,"errorMessage":"Failed to load extension descriptor at ","messagePattern":"Failed to load extension descriptor at ","errorType":"exception","errorClass":"GradleException","httpStatus":null,"severity":"error","filePath":"devtools/gradle/gradle-model/src/main/java/io/quarkus/gradle/tooling/dependency/DependencyUtils.java","lineNumber":187,"sourceCode":"        }\n\n        Set<File> resourcesSourceDirs = mainSourceSet.getResources().getSrcDirs();\n        for (File resourceSourceDir : resourcesSourceDirs) {\n            Path descriptorPath = resourceSourceDir.toPath().resolve(BootstrapConstants.DESCRIPTOR_PATH);\n            if (Files.isRegularFile(descriptorPath)) {\n                return descriptorPath;\n            }\n        }\n\n        return null;\n    }\n\n    private static Properties loadLocalExtensionDescriptor(Path descriptorPath) {\n        Properties descriptor = new Properties();\n        try (InputStream inputStream = Files.newInputStream(descriptorPath)) {\n            descriptor.load(inputStream);\n        } catch (IOException x) {\n            throw new GradleException(\"Failed to load extension descriptor at \" + descriptorPath, x);\n        }\n\n        return descriptor;\n    }\n\n    @Nullable\n    public static ExtensionDependency<?> getProjectExtensionDependencyOrNull(\n            Project project,\n            String projectPath,\n            @Nullable String buildPath) {\n        Project extensionProject = project.getRootProject().findProject(projectPath);\n        if (extensionProject == null) {\n            IncludedBuild extProjIncludedBuild = ToolingUtils.includedBuild(project, buildPath);\n            if (extProjIncludedBuild instanceof IncludedBuildInternal) {\n                extensionProject = ToolingUtils\n                        .includedBuildProject((IncludedBuildInternal) extProjIncludedBuild, projectPath);\n            }\n        }","sourceCodeStart":169,"sourceCodeEnd":205,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/devtools/gradle/gradle-model/src/main/java/io/quarkus/gradle/tooling/dependency/DependencyUtils.java#L169-L205","documentation":"loadLocalExtensionDescriptor reads a local project's META-INF/quarkus-extension.properties descriptor into a Properties object. Any IOException while opening or reading the descriptor file (file removed from the resources output dir after the path was discovered, permission problem, IO error) is wrapped in a GradleException that includes the descriptor path. The path was already confirmed to be a regular file moments earlier, so this usually indicates a race or environment issue rather than a missing file.","triggerScenarios":"getExtensionInfoOrNull finds a quarkus-extension.properties in the extension project's resource source dirs, then loadLocalExtensionDescriptor fails to open/read it — e.g. the file was deleted between findLocalExtensionDescriptorPath and the read, or the resource dir is on a failing mount.","commonSituations":"Parallel builds where a clean task removes build/resources directories while Quarkus tooling reads the descriptor; restricted file permissions in CI; network/overlay filesystems flaking during heavy builds.","solutions":["Re-run the build — the race with clean/parallel tasks usually disappears","Ensure no clean task runs concurrently with tasks that collect extension dependencies (check task ordering / dependsOn)","Check permissions on the descriptor file and its source directory (ls -l)","Verify filesystem health if source dirs are on network mounts or containers with bind mounts","Regenerate the descriptor if the extension project's build is expected to produce it"],"exampleFix":"null","handlingStrategy":"try-catch","validationCode":"Path desc = srcDir.toPath().resolve(\"META-INF/quarkus-extension.properties\");\nif (!Files.isRegularFile(desc) || !Files.isReadable(desc)) {\n    throw new IllegalStateException(\"Descriptor missing/unreadable: \" + desc);\n}","typeGuard":null,"tryCatchPattern":"try {\n    var info = DependencyUtils.getExtensionInfoOrNull(project, extensionProject);\n} catch (GradleException e) {\n    if (e.getMessage().startsWith(\"Failed to load extension descriptor at \")) {\n        // re-check file existence/permissions, retry after clean\n    } else throw e;\n}","preventionTips":["Do not run clean in parallel with tasks reading project resources","Check resource directory permissions in CI images","Regenerate descriptors when extension metadata changes","Avoid editing quarkus-extension.properties while a build is running"],"tags":["gradle","io","descriptor","properties"],"backgroundTag":"file-read-failed","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}