quarkusio/quarkus · error · GradleException

Failed to load extension descriptor at

Error message

Failed to load extension descriptor at 

What it means

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.

Source

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

        }

        Set<File> resourcesSourceDirs = mainSourceSet.getResources().getSrcDirs();
        for (File resourceSourceDir : resourcesSourceDirs) {
            Path descriptorPath = resourceSourceDir.toPath().resolve(BootstrapConstants.DESCRIPTOR_PATH);
            if (Files.isRegularFile(descriptorPath)) {
                return descriptorPath;
            }
        }

        return null;
    }

    private static Properties loadLocalExtensionDescriptor(Path descriptorPath) {
        Properties descriptor = new Properties();
        try (InputStream inputStream = Files.newInputStream(descriptorPath)) {
            descriptor.load(inputStream);
        } catch (IOException x) {
            throw new GradleException("Failed to load extension descriptor at " + descriptorPath, x);
        }

        return descriptor;
    }

    @Nullable
    public static ExtensionDependency<?> getProjectExtensionDependencyOrNull(
            Project project,
            String projectPath,
            @Nullable String buildPath) {
        Project extensionProject = project.getRootProject().findProject(projectPath);
        if (extensionProject == null) {
            IncludedBuild extProjIncludedBuild = ToolingUtils.includedBuild(project, buildPath);
            if (extProjIncludedBuild instanceof IncludedBuildInternal) {
                extensionProject = ToolingUtils
                        .includedBuildProject((IncludedBuildInternal) extProjIncludedBuild, projectPath);
            }
        }

View on GitHub (pinned to e1c734241f)

Solutions

  1. Re-run the build — the race with clean/parallel tasks usually disappears
  2. Ensure no clean task runs concurrently with tasks that collect extension dependencies (check task ordering / dependsOn)
  3. Check permissions on the descriptor file and its source directory (ls -l)
  4. Verify filesystem health if source dirs are on network mounts or containers with bind mounts
  5. Regenerate the descriptor if the extension project's build is expected to produce it

Example fix

null
Defensive patterns

Strategy: try-catch

Validate before calling

Path desc = srcDir.toPath().resolve("META-INF/quarkus-extension.properties");
if (!Files.isRegularFile(desc) || !Files.isReadable(desc)) {
    throw new IllegalStateException("Descriptor missing/unreadable: " + desc);
}

Try / catch

try {
    var info = DependencyUtils.getExtensionInfoOrNull(project, extensionProject);
} catch (GradleException e) {
    if (e.getMessage().startsWith("Failed to load extension descriptor at ")) {
        // re-check file existence/permissions, retry after clean
    } else throw e;
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Understand the failure class

Background: "failed to read file", EACCES, ENOENT and "could not read <path>" errors: when a program can't read a file from disk — this error's family across 49 libraries.

Related errors


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