quarkusio/quarkus · error · RuntimeException
Failed to read ${extPropsVisitUrl}
Error message
Failed to read ${extPropsVisitUrl} What it means
DevUIProcessor scans extensions' quarkus-extension.properties files (located via ClassPathVisitor/extPropsVisit) to collect deployment build metadata for the Dev UI. This error is thrown when the properties file cannot be read from disk (IOException while opening/reading the path). It indicates a corrupted or inaccessible JAR containing the extension descriptor.
Source
Thrown at extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/DevUIProcessor.java:1066
}
})
.build());
devUIWebJarProducer.produce(new DevUIWebJarBuildItem(deploymentKey, DEVUI));
}
private static GACT getDeploymentKey(ResolvedDependency runtimeExt) {
// Return null instead of throwing when the resource is not found in a given path tree root,
// so that MultiRootPathTree.apply() can continue searching the remaining roots.
final GACT result = runtimeExt.getContentTree().apply(BootstrapConstants.DESCRIPTOR_PATH, extPropsVisit -> {
if (extPropsVisit == null) {
return null;
}
final Properties props = new Properties();
try (BufferedReader reader = Files.newBufferedReader(extPropsVisit.getPath())) {
props.load(reader);
} catch (IOException e) {
throw new RuntimeException("Failed to read " + extPropsVisit.getUrl(), e);
}
final String deploymentCoords = props.getProperty(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT);
if (deploymentCoords == null) {
throw new RuntimeException(
"Failed to locate " + BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT + " in " + extPropsVisit.getUrl());
}
var coords = GACTV.fromString(deploymentCoords);
return new GACT(coords.getGroupId(), coords.getArtifactId(), coords.getClassifier(), coords.getType());
});
if (result == null) {
throw new RuntimeException("Failed to locate " + BootstrapConstants.DESCRIPTOR_PATH
+ " in " + runtimeExt.toCompactCoords());
}
return result;
}
@BuildStep(onlyIf = IsLocalDevelopment.class)
void createAllRoutes(WebJarResultsBuildItem webJarResultsBuildItem,View on GitHub (pinned to e1c734241f)
Solutions
- Delete the affected extension artifact from ~/.m2/repository and let Maven re-download it
- Run a clean build (./mvnw clean install) to refresh classpath entries
- Check the cause (IOException) for the exact path and fix filesystem permissions if applicable
- Inspect the quarkus-extension.properties URL printed in the message to identify which extension's JAR is broken
Example fix
null
Defensive patterns
Strategy: try-catch
Validate before calling
Path p = extPropsVisit.getPath();
if (p == null || !Files.isReadable(p)) {
throw new IllegalStateException("Extension properties file not readable: " + p);
} Try / catch
try {
props.load(Files.newBufferedReader(extPropsVisit.getPath()));
} catch (IOException e) {
log.warn("Skipping unreadable extension descriptor " + extPropsVisit.getUrl() + ": " + e.getMessage());
} Prevention
- Keep ~/.m2/repository healthy; re-download corrupted JARs
- Verify read permissions on local repo in CI containers
- Run ./mvnw clean after dependency bumps to refresh artifacts
When it happens
Trigger: Files.newBufferedReader(extPropsVisit.getPath()) throws IOException because the JAR/entry is unreadable — e.g. a truncated or corrupted artifact in the local Maven repository, permission problems, or a broken classpath entry.
Common situations: Interrupted downloads leaving partial JARs in ~/.m2/repository; file permissions blocking read in CI containers; working in a project with duplicate/conflicting extension versions where a stale artifact is referenced.
Related errors
- An error occurred while processing ${resourceName}
- Invalid hue, number needs to be between 0 and 360. Defines a
- Invalid saturation, number needs to be between 0 and 100. 0%
- Invalid lightness, number needs to be between 0 and 100. 0%
- Invalid alpha, number needs to be between 0 and 1. 0 is full
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/6e019cafe2fdcd14.
Report an issue: GitHub.