{"record":{"id":"a71a5258cc6bb15e","repo":"quarkusio/quarkus","slug":"unable-to-collect-interfaces-of-iface-becaus","errorCode":null,"errorMessage":"Unable to collect interfaces of  + iface +  because it was not indexed. Consider adding it to Jandex index","messagePattern":"Unable to collect interfaces of  \\+ iface \\+  because it was not indexed\\. Consider adding it to Jandex index","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions/spring-boot-properties/deployment/src/main/java/io/quarkus/spring/boot/properties/deployment/InterfaceConfigurationPropertiesUtil.java","lineNumber":301,"sourceCode":"                            }\n                        });\n                    });\n                }\n            }\n        });\n\n        return generatedClassName;\n    }\n\n    private static void collectInterfacesRec(ClassInfo current, IndexView index, Set<DotName> result) {\n        List<DotName> interfaces = current.interfaceNames();\n        if (interfaces.isEmpty()) {\n            return;\n        }\n        for (DotName iface : interfaces) {\n            ClassInfo classByName = index.getClassByName(iface);\n            if (classByName == null) {\n                throw new IllegalStateException(\"Unable to collect interfaces of \" + iface\n                        + \" because it was not indexed. Consider adding it to Jandex index\");\n            }\n            result.add(iface);\n            collectInterfacesRec(classByName, index, result);\n        }\n    }\n\n    /**\n     * The interface implementations needs to be in the same package as the generated utility class that they extend.\n     * The name also needs to be unique so there are no clashes if there are multiple interfaces\n     * annotated with @ConfigProperties\n     */\n    private static String createName(DotName ifaceName, String prefixStr) {\n        return ConfigurationPropertiesUtil.PACKAGE_TO_PLACE_GENERATED_CLASSES + \".\" + ifaceName.withoutPackagePrefix() + \"_\"\n                + HashUtil.sha1(ifaceName.toString()) + \"_\" + HashUtil.sha1(prefixStr);\n    }\n\n    private static boolean isDefault(short flags) {","sourceCodeStart":283,"sourceCodeEnd":319,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/spring-boot-properties/deployment/src/main/java/io/quarkus/spring/boot/properties/deployment/InterfaceConfigurationPropertiesUtil.java#L283-L319","documentation":"While recursively collecting all super-interfaces of a @ConfigProperties interface to generate implementations, Quarkus looks each interface up in the Jandex index. A super-interface not present in the index cannot be processed, so deployment fails with IllegalStateException.","triggerScenarios":"A @ConfigProperties interface extends another interface that is not indexed by Jandex — e.g. the parent interface lives in a dependency JAR built without a Jandex index, or was excluded from indexing via quarkus.index-dependency configuration.","commonSituations":"Shared config interfaces in a company commons library without the jandex-maven-plugin; using a JDK or third-party interface as parent of a config interface.","solutions":["Add the jandex-maven-plugin to the library containing the parent interface so it ships a META-INF/jandex.idx","Register the dependency for indexing with quarkus.index-dependency.<name>.group-id/artifact-id application properties","Remove the unindexed parent interface (flatten members into the config interface)"],"exampleFix":"// application.properties before\n(nothing)\n// after\nquarkus.index-dependency.commons.group-id=com.myco\nquarkus.index-dependency.commons.artifact-id=commons-config","handlingStrategy":"validation","validationCode":"// build-time check: ensure parent interfaces ship a Jandex index\nboolean hasIndex(Dependency d) {\n    return java.util.zip.ZipEntry exists d.jar(\"META-INF/jandex.idx\");\n}","typeGuard":null,"tryCatchPattern":"catch (IllegalStateException e) { if (e.getMessage().contains(\"not indexed\")) { /* configure quarkus.index-dependency.* */ } throw e; }","preventionTips":["Add jandex-maven-plugin to shared libraries used as config parents","Register non-project dependencies with quarkus.index-dependency.*","Never extend JDK/third-party interfaces from @ConfigProperties interfaces"],"tags":["quarkus","jandex","index","spring-boot-properties"],"backgroundTag":"class-not-indexed","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}