quarkusio/quarkus · error · UncheckedIOException
Failed to load extension description + path
Error message
Failed to load extension description + path
What it means
Quarkus's Gradle application plugin loads an extension's quarkus-extension.properties description file from disk while building the application model. If the properties file exists at the resolved path but cannot be read (I/O error), the task wraps the IOException in an UncheckedIOException. This usually indicates a file permission problem or the file disappearing mid-read, not a bad extension.
Source
Thrown at devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/QuarkusApplicationModelTask.java:726
if (providesCapabilities != null) {
modelBuilder
.addExtensionCapabilities(
CapabilityContract.of(artifactBuilder.toGACTVString(), providesCapabilities, null));
}
return true;
}
private static Properties readDescriptor(final Path path) {
final Properties rtProps;
if (!Files.exists(path)) {
// not a platform artifact
return null;
}
rtProps = new Properties();
try (BufferedReader reader = Files.newBufferedReader(path)) {
rtProps.load(reader);
} catch (IOException e) {
throw new UncheckedIOException("Failed to load extension description " + path, e);
}
return rtProps;
}
}
View on GitHub (pinned to e1c734241f)
Solutions
- Delete the affected artifact directory from the local Gradle/Maven cache and re-run the build so it is re-downloaded
- Check file permissions on the extension descriptor path reported in the message and restore read access
- Stop concurrent builds/IDE sync that may delete files mid-read, then retry
- Re-import/refresh the project in the IDE to force re-resolution of the dependency model
Example fix
// before
Properties rtProps = new Properties();
try (BufferedReader reader = Files.newBufferedReader(path)) { rtProps.load(reader); }
// after
// fix at the environment level: re-download the corrupted artifact
// ./gradlew --stop && rm -rf ~/.m2/repository/io/quarkus/<broken-extension> && ./gradlew build Defensive patterns
Strategy: try-catch
Validate before calling
Path p = extensionDescriptionPath;
if (p != null && Files.isRegularFile(p) && Files.isReadable(p)) {
// safe to let the plugin load it
} Type guard
boolean isReadableFile(Path p) {
return p != null && Files.isRegularFile(p) && Files.isReadable(p);
} Try / catch
try {
// run the gradle build/task
} catch (UncheckedIOException e) {
if (e.getMessage().startsWith("Failed to load extension description")) {
// delete the offending artifact dir from the local repo and retry once
} else { throw e; }
} Prevention
- Avoid concurrent builds sharing the same local repository
- Regularly prune and re-download a corrupted ~/.m2 / Gradle cache
- Don't run builds as root on shared CI caches
- Close IDE syncs while running command-line builds
When it happens
Trigger: Files.newBufferedReader(path) throws IOException while loading an extension descriptor in QuarkusApplicationModelTask — e.g. unreadable permissions, file deleted between resolution and read, or a broken symlink in the local repository.
Common situations: Corrupted or partially-downloaded ~/.m2/repository entries; extension jars wiped by a concurrent build; read-only or root-owned files on CI; antivirus locking files on Windows.
Related errors
- Failed to load extension description
- Failed to hash content of
- Failed to create directories in %s
- Failed to copy %s to %s
- Failed to load + pomPropsPath + from the classpath
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/baffd5794cdf077c.
Report an issue: GitHub.