{"record":{"id":"dfcf36a1a7f56ff0","repo":"quarkusio/quarkus","slug":"task-s-requires-extensions-s-to-add-the-exten","errorCode":null,"errorMessage":"Task: %s requires extensions: %s. To add the extensions to the project, you can run the following command:\n\tgradle addExtension --extensions=%s","messagePattern":"Task: (.+?) requires extensions: (.+?)\\. To add the extensions to the project, you can run the following command:\n\tgradle addExtension --extensions=(.+?)","errorType":"exception","errorClass":"GradleException","httpStatus":null,"severity":"error","filePath":"devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/ImageCheckRequirementsTask.java","lineNumber":102,"sourceCode":"                .or(() -> {\n                    try {\n                        return availableBuilders().stream().findFirst();\n                    } catch (IOException e) {\n                        throw new RuntimeException(e);\n                    }\n                })\n                .orElse(ImageCheckRequirementsTask.Builder.docker);\n    }\n\n    @TaskAction\n    public void checkRequiredExtensions() throws IOException {\n\n        // Currently forcedDependencies() is not implemented for gradle.\n        // So, let's give users a meaningful warning message.\n        List<Builder> availableBuidlers = availableBuilders();\n        Optional<Builder> missingBuilder = Optional.of(builder()).filter(Predicate.not(availableBuidlers::contains));\n        missingBuilder.map(builder -> QUARKUS_CONTAINER_IMAGE_PREFIX + builder.name()).ifPresent(missingDependency -> {\n            throw new GradleException(String.format(\n                    \"Task: %s requires extensions: %s. \" +\n                            \"To add the extensions to the project, you can run the following command:\\n\" +\n                            \"\\tgradle addExtension --extensions=%s\",\n                    getName(), missingDependency, missingDependency));\n        });\n\n        if (!missingBuilder.isPresent() && availableBuidlers.isEmpty()) {\n            String availableExtensions = Arrays.stream(Builder.values())\n                    .map(Builder::name)\n                    .collect(Collectors.joining(\", \", \"[\", \"]\"));\n\n            throw new GradleException(String.format(\n                    \"Task: %s requires one of the extensions: %s. \" +\n                            \"To add the extensions to the project, you can run the following command:\\n\" +\n                            \"\\tgradle addExtension --extensions=<extension name>\",\n                    getName(), availableExtensions));\n        }\n","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/ImageCheckRequirementsTask.java#L84-L120","documentation":"Thrown by ImageCheckRequirementsTask.checkRequiredExtensions() when the container-image builder selected via quarkus.container-image.builder (e.g. docker, jib, s2i) does not have its corresponding Quarkus extension present in the project. Gradle lacks forcedDependencies, so Quarkus fails fast with the exact addExtension command to run.","triggerScenarios":"Running any task extending ImageCheckRequirementsTask (image-build, image-push, etc.) where builder() returns a Builder whose QUARKUS_CONTAINER_IMAGE_PREFIX + name extension (e.g. quarkus-container-image-docker) is not among the project's applied extensions.","commonSituations":"Setting quarkus.container-image.builder=docker while only quarkus-container-image-jib is applied; CI pipelines reusing config from another service; switching builders after migrating from Maven (which auto-adds dependencies).","solutions":["Run the suggested command: gradle addExtension --extensions=quarkus-container-image-<builder>","Or manually add the matching dependency, e.g. implementation(\"io.quarkus:quarkus-container-image-docker\")","Or set quarkus.container-image.builder to a builder whose extension is already applied"],"exampleFix":"// before (application.properties)\nquarkus.container-image.builder=docker\n// build.gradle lacks: implementation 'io.quarkus:quarkus-container-image-docker'\n// after: run\ngradle addExtension --extensions=quarkus-container-image-docker","handlingStrategy":"validation","validationCode":"def hasBuilderExtension(project: Project, builder: String): Boolean =\n  project.configurations.getByName(\"implementation\")\n    .dependencies.any { it.group == \"io.quarkus\" && it.name == \"quarkus-container-image-$builder\" }","typeGuard":null,"tryCatchPattern":"try { ./gradlew imageBuild } catch/see GradleException {\n  // parse message 'requires extensions: <name>' and run\n  // gradle addExtension --extensions=<name> in CI bootstrap\n}","preventionTips":["Keep quarkus.container-image.builder in sync with the applied quarkus-container-image-* extension","Use addExtension instead of hand-editing dependencies","Standardize builder config across services in CI templates"],"tags":["gradle","container-image","missing-extension"],"backgroundTag":"missing-required-extension","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"}