{"record":{"id":"8a53da7a3102ef56","repo":"quarkusio/quarkus","slug":"task-s-requires-one-of-the-extensions-s-to-ad","errorCode":null,"errorMessage":"Task: %s requires one of the extensions: %s. To add the extensions to the project, you can run the following command:\n\tgradle addExtension --extensions=<extension name>","messagePattern":"Task: (.+?) requires one of the extensions: (.+?)\\. To add the extensions to the project, you can run the following command:\n\tgradle addExtension --extensions=<extension name>","errorType":"exception","errorClass":"GradleException","httpStatus":null,"severity":"error","filePath":"devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/ImageCheckRequirementsTask.java","lineNumber":114,"sourceCode":"\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\n        File outputFile = getOutputFile().get().getAsFile();\n        Files.write(outputFile.toPath(), builder().name().getBytes());\n    }\n}\n","sourceCodeStart":96,"sourceCodeEnd":125,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/ImageCheckRequirementsTask.java#L96-L125","documentation":"Thrown by ImageCheckRequirementsTask.checkRequiredExtensions() when no container-image builder extension is present in the project at all (and the builder() check did not produce a single missing dependency). The error lists all valid Builder values and how to add one.","triggerScenarios":"Running image-build/image-push style tasks in a project with no quarkus-container-image-* extension applied and no builder resolved from configuration.","commonSituations":"Adding container image config keys but forgetting any quarkus-container-image-* dependency; fresh projects where only quarkus-rest or similar was added; copy-pasting image-build into a Gradle project never set up for images.","solutions":["Add a container-image extension, e.g. gradle addExtension --extensions=quarkus-container-image-docker (or jib, s2i, buildpack, openshift, kubernetes)","Or add implementation(\"io.quarkus:quarkus-container-image-jib\") to build.gradle","Set quarkus.container-image.builder explicitly to match the extension added"],"exampleFix":"// before\n// no container-image extension in build.gradle\n// after\ndependencies { implementation(\"io.quarkus:quarkus-container-image-jib\") }","handlingStrategy":"validation","validationCode":"def hasAnyContainerImageExtension(project: Project): Boolean =\n  project.configurations.getByName(\"implementation\")\n    .dependencies.any { it.group == \"io.quarkus\" && it.name.startsWith(\"quarkus-container-image-\") }","typeGuard":null,"tryCatchPattern":"try { ./gradlew imageBuild } catch/see GradleException {\n  // 'requires one of the extensions' -> add a builder extension first:\n  // gradle addExtension --extensions=quarkus-container-image-jib\n}","preventionTips":["Always include a quarkus-container-image-* extension when using image tasks","Declare the extension in the base build script shared by modules","Document which builder the team uses and set it once"],"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"}