quarkusio/quarkus · error · GradleException

Task: %s requires extensions: %s. To add the extensions to t

Error message

Task: %s requires extensions: %s. To add the extensions to the project, you can run the following command:
	gradle addExtension --extensions=%s

What it means

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.

Source

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

                .or(() -> {
                    try {
                        return availableBuilders().stream().findFirst();
                    } catch (IOException e) {
                        throw new RuntimeException(e);
                    }
                })
                .orElse(ImageCheckRequirementsTask.Builder.docker);
    }

    @TaskAction
    public void checkRequiredExtensions() throws IOException {

        // 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));
        }

View on GitHub (pinned to e1c734241f)

Solutions

  1. Run the suggested command: gradle addExtension --extensions=quarkus-container-image-<builder>
  2. Or manually add the matching dependency, e.g. implementation("io.quarkus:quarkus-container-image-docker")
  3. Or set quarkus.container-image.builder to a builder whose extension is already applied

Example fix

// before (application.properties)
quarkus.container-image.builder=docker
// build.gradle lacks: implementation 'io.quarkus:quarkus-container-image-docker'
// after: run
gradle addExtension --extensions=quarkus-container-image-docker
Defensive patterns

Strategy: validation

Validate before calling

def hasBuilderExtension(project: Project, builder: String): Boolean =
  project.configurations.getByName("implementation")
    .dependencies.any { it.group == "io.quarkus" && it.name == "quarkus-container-image-$builder" }

Try / catch

try { ./gradlew imageBuild } catch/see GradleException {
  // parse message 'requires extensions: <name>' and run
  // gradle addExtension --extensions=<name> in CI bootstrap
}

Prevention

When it happens

Trigger: 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.

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

Related errors


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