{"record":{"id":"7fa65a2396a0caa5","repo":"quarkusio/quarkus","slug":"failed-to-determine-a-compatible-quarkus-version-f-7fa65a","errorCode":null,"errorMessage":"Failed to determine a compatible Quarkus version for the requested extensions: ${extensionKeys}","messagePattern":"Failed to determine a compatible Quarkus version for the requested extensions: (.+?)","errorType":"exception","errorClass":"QuarkusCommandException","httpStatus":null,"severity":"warning","filePath":"independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/project/update/ProjectUpdateInfos.java","lineNumber":210,"sourceCode":"        return stateBuilder.build();\n    }\n\n    private static List<ExtensionCatalog> getRecommendedOrigins(List<Extension> extensions)\n            throws QuarkusCommandException {\n        final List<ExtensionOrigins> extOrigins = new ArrayList<>(extensions.size());\n        for (Extension e : extensions) {\n            addOrigins(extOrigins, e);\n        }\n\n        final OriginCombination recommendedCombination = OriginSelector.of(extOrigins).calculateRecommendedCombination();\n        if (recommendedCombination == null) {\n            final StringBuilder buf = new StringBuilder();\n            buf.append(\"Failed to determine a compatible Quarkus version for the requested extensions: \");\n            buf.append(extensions.get(0).getArtifact().getKey().toGacString());\n            for (int i = 1; i < extensions.size(); ++i) {\n                buf.append(\", \").append(extensions.get(i).getArtifact().getKey().toGacString());\n            }\n            throw new QuarkusCommandException(buf.toString());\n        }\n        return recommendedCombination.getUniqueSortedCatalogs();\n    }\n\n    private static void addOrigins(final List<ExtensionOrigins> extOrigins, Extension e) {\n        ExtensionOrigins.Builder eoBuilder = null;\n        for (ExtensionOrigin o : e.getOrigins()) {\n            if (o instanceof ExtensionCatalog c) {\n                final OriginPreference op = (OriginPreference) c.getMetadata().get(Constants.REGISTRY_CLIENT_ORIGIN_PREFERENCE);\n                if (op == null) {\n                    continue;\n                }\n                if (eoBuilder == null) {\n                    eoBuilder = ExtensionOrigins.builder(e.getArtifact().getKey());\n                }\n                eoBuilder.addOrigin(c, op);\n            }\n        }","sourceCodeStart":192,"sourceCodeEnd":228,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/project/update/ProjectUpdateInfos.java#L192-L228","documentation":"When computing a recommended project state, ProjectUpdateInfos.getRecommendedOrigins() feeds each extension's candidate origins into OriginSelector to find a set of platform/catalog combinations compatible with ALL extensions. When OriginSelector returns null (no mutually compatible combination exists), a QuarkusCommandException listing all requested extensions is thrown. resolveRecommendedState() catches it, logs a warning, and returns the unchanged current state.","triggerScenarios":"Calling ProjectUpdateInfos.resolveRecommendedState(currentState, recommendedCatalog, log) when the current extensions have no common compatible Quarkus platform version in the configured registries — e.g. extensions whose latest origins belong to disjoint platform streams with no overlapping version combination.","commonSituations":"Projects mixing extensions available only in an older platform stream with extensions only in a newer stream, custom/locally-built extensions registered with origin-preference metadata that no registry platform provides, stale registry cache after a platform removal, pinning extensions across major Quarkus versions.","solutions":["Update or remove the outlier extension(s) listed in the message so all extensions belong to one Quarkus platform stream","Refresh the registry cache (delete ~/.quarkus/repository cache or set quarkus.registry client to fetch fresh metadata) so current platform combinations are visible","Check configured registries in ~/.m2/settings.xml / quarkus registry config; ensure the platform catalog containing a compatible version is enabled","Note this is caught and downgraded to a warning by resolveRecommendedState — review the log output; if used via getRecommendedOrigins directly, handle QuarkusCommandException"],"exampleFix":"<!-- before: mixing incompatible streams -->\n<dependency>io.quarkus:quarkus-rest:2.16-only-ext</dependency>\n<dependency>io.quarkus:quarkus-vertx:3.x-only-ext</dependency>\n<!-- after: align all extensions to one platform stream -->\n<dependencyManagement>import io.quarkus.platform:quarkus-bom:3.15.1</dependencyManagement>\n<dependency>io.quarkus:quarkus-vertx</dependency> <!-- version from BOM -->","handlingStrategy":"fallback","validationCode":"// pre-check overlap of platform origins across extensions\nSet<String> allStreams = recommendedCatalog.getExtensions().stream()\n    .flatMap(e -> e.getOrigins().stream())\n    .map(ExtensionOrigin::getPlatformKey).collect(Collectors.toSet());\nif (allStreams.size() > 1) log.warn(\"Extensions span multiple platform streams: \" + allStreams);","typeGuard":null,"tryCatchPattern":"ProjectState recommended;\ntry {\n    recommended = ProjectUpdateInfos.resolveRecommendedState(currentState, catalog, log);\n} catch (QuarkusCommandException e) {\n    log.warn(\"No compatible platform combination; keeping current state\");\n    recommended = currentState;\n}","preventionTips":["Keep all extensions from a single Quarkus platform stream","Refresh the Quarkus registry cache after platform releases/removals","Remove or upgrade orphaned extensions with no metadata in the target catalog","Check the warning list of extensions lacking compatibility info and resolve those first"],"tags":["platform-compatibility","extensions","registry","version-conflict"],"backgroundTag":"incompatible-platform-version-combination","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"}