{"record":{"id":"6e019cafe2fdcd14","repo":"quarkusio/quarkus","slug":"failed-to-read-extpropsvisiturl","errorCode":null,"errorMessage":"Failed to read ${extPropsVisitUrl}","messagePattern":"Failed to read (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/DevUIProcessor.java","lineNumber":1066,"sourceCode":"                    }\n                })\n                .build());\n\n        devUIWebJarProducer.produce(new DevUIWebJarBuildItem(deploymentKey, DEVUI));\n    }\n\n    private static GACT getDeploymentKey(ResolvedDependency runtimeExt) {\n        // Return null instead of throwing when the resource is not found in a given path tree root,\n        // so that MultiRootPathTree.apply() can continue searching the remaining roots.\n        final GACT result = runtimeExt.getContentTree().apply(BootstrapConstants.DESCRIPTOR_PATH, extPropsVisit -> {\n            if (extPropsVisit == null) {\n                return null;\n            }\n            final Properties props = new Properties();\n            try (BufferedReader reader = Files.newBufferedReader(extPropsVisit.getPath())) {\n                props.load(reader);\n            } catch (IOException e) {\n                throw new RuntimeException(\"Failed to read \" + extPropsVisit.getUrl(), e);\n            }\n            final String deploymentCoords = props.getProperty(BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT);\n            if (deploymentCoords == null) {\n                throw new RuntimeException(\n                        \"Failed to locate \" + BootstrapConstants.PROP_DEPLOYMENT_ARTIFACT + \" in \" + extPropsVisit.getUrl());\n            }\n            var coords = GACTV.fromString(deploymentCoords);\n            return new GACT(coords.getGroupId(), coords.getArtifactId(), coords.getClassifier(), coords.getType());\n        });\n        if (result == null) {\n            throw new RuntimeException(\"Failed to locate \" + BootstrapConstants.DESCRIPTOR_PATH\n                    + \" in \" + runtimeExt.toCompactCoords());\n        }\n        return result;\n    }\n\n    @BuildStep(onlyIf = IsLocalDevelopment.class)\n    void createAllRoutes(WebJarResultsBuildItem webJarResultsBuildItem,","sourceCodeStart":1048,"sourceCodeEnd":1084,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/devui/deployment/src/main/java/io/quarkus/devui/deployment/DevUIProcessor.java#L1048-L1084","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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"],"exampleFix":"null","handlingStrategy":"try-catch","validationCode":"Path p = extPropsVisit.getPath();\nif (p == null || !Files.isReadable(p)) {\n    throw new IllegalStateException(\"Extension properties file not readable: \" + p);\n}","typeGuard":null,"tryCatchPattern":"try {\n    props.load(Files.newBufferedReader(extPropsVisit.getPath()));\n} catch (IOException e) {\n    log.warn(\"Skipping unreadable extension descriptor \" + extPropsVisit.getUrl() + \": \" + e.getMessage());\n}","preventionTips":["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"],"tags":["devui","build-time","ioexception","extension-descriptor"],"backgroundTag":"unreadable-classpath-resource","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}