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

  1. Delete the affected artifact directory from the local Gradle/Maven cache and re-run the build so it is re-downloaded
  2. Check file permissions on the extension descriptor path reported in the message and restore read access
  3. Stop concurrent builds/IDE sync that may delete files mid-read, then retry
  4. 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

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


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