quarkusio/quarkus · error · GradleException

Task: %s requires one of the extensions: %s. To add the exte

Error message

Task: %s requires one of the extensions: %s. To add the extensions to the project, you can run the following command:
	gradle addExtension --extensions=<extension name>

What it means

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.

Source

Thrown at devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/tasks/ImageCheckRequirementsTask.java:114

        // Currently forcedDependencies() is not implemented for gradle.
        // So, let's give users a meaningful warning message.
        List<Builder> availableBuidlers = availableBuilders();
        Optional<Builder> missingBuilder = Optional.of(builder()).filter(Predicate.not(availableBuidlers::contains));
        missingBuilder.map(builder -> QUARKUS_CONTAINER_IMAGE_PREFIX + builder.name()).ifPresent(missingDependency -> {
            throw new GradleException(String.format(
                    "Task: %s requires extensions: %s. " +
                            "To add the extensions to the project, you can run the following command:\n" +
                            "\tgradle addExtension --extensions=%s",
                    getName(), missingDependency, missingDependency));
        });

        if (!missingBuilder.isPresent() && availableBuidlers.isEmpty()) {
            String availableExtensions = Arrays.stream(Builder.values())
                    .map(Builder::name)
                    .collect(Collectors.joining(", ", "[", "]"));

            throw new GradleException(String.format(
                    "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>",
                    getName(), availableExtensions));
        }

        File outputFile = getOutputFile().get().getAsFile();
        Files.write(outputFile.toPath(), builder().name().getBytes());
    }
}

View on GitHub (pinned to e1c734241f)

Solutions

  1. Add a container-image extension, e.g. gradle addExtension --extensions=quarkus-container-image-docker (or jib, s2i, buildpack, openshift, kubernetes)
  2. Or add implementation("io.quarkus:quarkus-container-image-jib") to build.gradle
  3. Set quarkus.container-image.builder explicitly to match the extension added

Example fix

// before
// no container-image extension in build.gradle
// after
dependencies { implementation("io.quarkus:quarkus-container-image-jib") }
Defensive patterns

Strategy: validation

Validate before calling

def hasAnyContainerImageExtension(project: Project): Boolean =
  project.configurations.getByName("implementation")
    .dependencies.any { it.group == "io.quarkus" && it.name.startsWith("quarkus-container-image-") }

Try / catch

try { ./gradlew imageBuild } catch/see GradleException {
  // 'requires one of the extensions' -> add a builder extension first:
  // gradle addExtension --extensions=quarkus-container-image-jib
}

Prevention

When it happens

Trigger: Running image-build/image-push style tasks in a project with no quarkus-container-image-* extension applied and no builder resolved from configuration.

Common situations: 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.

Related errors


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/8a53da7a3102ef56. Report an issue: GitHub.