{"record":{"id":"f35cdc8c85cb24b1","repo":"quarkusio/quarkus","slug":"failed-to-create-project-because-of-invalid-extens","errorCode":null,"errorMessage":"Failed to create project because of invalid extensions","messagePattern":"Failed to create project because of invalid extensions","errorType":"exception","errorClass":"QuarkusCommandException","httpStatus":null,"severity":"error","filePath":"independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/handlers/CreateJBangProjectCommandHandler.java","lineNumber":33,"sourceCode":"import io.quarkus.devtools.codestarts.jbang.QuarkusJBangCodestartProjectInput;\nimport io.quarkus.devtools.codestarts.jbang.QuarkusJBangCodestartProjectInputBuilder;\nimport io.quarkus.devtools.codestarts.quarkus.QuarkusCodestartData.QuarkusDataKey;\nimport io.quarkus.devtools.commands.CreateProject.CreateProjectKey;\nimport io.quarkus.devtools.commands.data.QuarkusCommandException;\nimport io.quarkus.devtools.commands.data.QuarkusCommandInvocation;\nimport io.quarkus.devtools.commands.data.QuarkusCommandOutcome;\nimport io.quarkus.devtools.messagewriter.MessageIcons;\nimport io.quarkus.devtools.project.QuarkusProject;\nimport io.quarkus.maven.dependency.ArtifactCoords;\nimport io.quarkus.registry.catalog.ExtensionCatalog;\n\npublic class CreateJBangProjectCommandHandler implements QuarkusCommandHandler {\n    @Override\n    public QuarkusCommandOutcome execute(QuarkusCommandInvocation invocation) throws QuarkusCommandException {\n        final Set<String> extensionsQuery = invocation.getValue(CreateProjectKey.EXTENSIONS, Collections.emptySet());\n        final List<ArtifactCoords> extensionsToAdd = computeCoordsFromQuery(invocation, extensionsQuery);\n        if (extensionsToAdd == null) {\n            throw new QuarkusCommandException(\"Failed to create project because of invalid extensions\");\n        }\n\n        final ExtensionCatalog catalog = invocation.getExtensionsCatalog();\n\n        final boolean noWrapper = invocation.getValue(NO_JBANG_WRAPPER, false) ||\n                invocation.getValue(CreateProjectKey.NO_BUILDTOOL_WRAPPER, false);\n\n        final QuarkusJBangCodestartProjectInputBuilder builder = QuarkusJBangCodestartProjectInput.builder()\n                .addExtensions(extensionsToAdd)\n                .setNoJBangWrapper(noWrapper)\n                .addData(toCodestartData(invocation.getValues()))\n                .putData(QuarkusDataKey.QUARKUS_VERSION, invocation.getExtensionsCatalog().getQuarkusCoreVersion());\n\n        if (catalog.getBom() != null) {\n            // TODO properly import the BOMs\n            final ArtifactCoords firstBom = catalog.getBom();\n            builder.putData(QuarkusJBangCodestartCatalog.JBangDataKey.QUARKUS_BOM_GROUP_ID.key(),\n                    firstBom.getGroupId())","sourceCodeStart":15,"sourceCodeEnd":51,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/commands/handlers/CreateJBangProjectCommandHandler.java#L15-L51","documentation":"CreateJBangProjectCommandHandler.execute throws QuarkusCommandException('Failed to create project because of invalid extensions') when computeCoordsFromQuery returns null, meaning one or more extension keywords in the query could not be resolved to artifact coordinates.","triggerScenarios":"Creating a JBang project ('quarkus create ... -x <ext>') with extension keywords that match nothing or are ambiguous, so computeCoordsFromQuery signals failure via null.","commonSituations":"Misspelled extension names; generic keywords matching multiple extensions; extensions not present in the configured platform/registry version.","solutions":["Fix the -x/--extension arguments to exact names or full GAVs","List available extensions to verify names (quarkus list extensions)","Use wildcards only where a single match results or patterns are allowed","Check the configured Quarkus platform version actually contains the extensions"],"exampleFix":"// before\nquarkus create jbang -x rest myapp\n// after\nquarkus create jbang -x quarkus-rest myapp","handlingStrategy":"validation","validationCode":"for (String q : extensionsQuery) {\n    long n = catalog.getExtensions().stream().filter(e -> e.getArtifact().getArtifactId().equals(q)).count();\n    if (n != 1) throw new IllegalArgumentException(\"Extension keyword '\" + q + \"' resolves to \" + n + \" extensions\");\n}","typeGuard":"static boolean resolvesUniquely(String keyword, ExtensionCatalog catalog) {\n    return catalog.getExtensions().stream()\n        .filter(e -> e.getArtifact().getArtifactId().equals(keyword)).count() == 1;\n}","tryCatchPattern":"try { handler.execute(invocation); } catch (QuarkusCommandException e) { /* message indicates invalid extensions; fix -x args */ }","preventionTips":["Use exact artifact ids or full GAVs in -x flags","Validate extension names against the target platform version","Keep CLI and platform versions aligned","Test create commands in scripts with exact names"],"tags":["cli","extensions","jbang"],"backgroundTag":"invalid-extension-query","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"}