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
- 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
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
- 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
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
- Failed to load extension description + path
- Failed to create directories in %s
- Failed to copy %s to %s
- Failed to load + pomPropsPath + from the classpath
- Failed to collect project's classes in a temporary dir
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/3c92cea7a5a00342.
Report an issue: GitHub.