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
- 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
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
- 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
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
- Task: %s requires extensions: %s. To add the extensions to t
- Failed to build AOT enhanced container image:
- A Kubernetes deployment was requested but no extension was f
- Could not find builder image '${effectiveBuilderImage}' loca
- Failed to resolve ${appArtifact}
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/8a53da7a3102ef56.
Report an issue: GitHub.