quarkusio/quarkus · error · IllegalArgumentException

Unsupported build tool wrapper: ${buildTool}

Error message

Unsupported build tool wrapper: ${buildTool}

What it means

When the project input requests build-tool wrapper tooling codestarts, the switch only handles GRADLE and MAVEN. Any other BuildTool value reaching getToolingCodestarts hits the default branch and throws this IllegalArgumentException, since wrapper generation is only implemented for these two build tools.

Source

Thrown at independent-projects/tools/devtools-common/src/main/java/io/quarkus/devtools/codestarts/quarkus/QuarkusCodestartCatalog.java:229

                .map(Extensions::toGA)
                .filter(extensionsMapping::containsKey)
                .map(extensionsMapping::get);
    }

    private List<String> getToolingCodestarts(QuarkusCodestartProjectInput projectInput) {
        final List<String> codestarts = new ArrayList<>();
        codestarts.add(projectInput.getBuildTool().getKey());
        if (projectInput.getAppContent().contains(AppContent.BUILD_TOOL_WRAPPER)) {
            switch (projectInput.getBuildTool()) {
                case GRADLE:
                case GRADLE_KOTLIN_DSL:
                    codestarts.add(Tooling.TOOLING_GRADLE_WRAPPER.key());
                    break;
                case MAVEN:
                    codestarts.add(Tooling.TOOLING_MAVEN_WRAPPER.key());
                    break;
                default:
                    throw new IllegalArgumentException("Unsupported build tool wrapper: " + projectInput.getBuildTool());
            }
        }
        if (projectInput.getAppContent().contains(AppContent.DOCKERFILES)) {
            codestarts.add(QuarkusCodestartCatalog.Tooling.TOOLING_DOCKERFILES.key());
        }
        return codestarts;
    }

    private Map<String, Object> generateSelectionData(QuarkusCodestartProjectInput projectInput,
            List<Codestart> projectCodestarts) {
        Map<String, Object> data = new HashMap<>();
        final Map<String, Object> inputData = new HashMap<>();
        inputData.put(INPUT_PROVIDED_CODE_KEY,
                projectCodestarts.stream().filter(c -> c.getType() == CodestartType.CODE).map(c -> {
                    Map<String, Object> eData = new HashMap<>();
                    eData.put("name", c.getName());
                    eData.put("tags", c.getTags());
                    eData.putAll(c.getMetadata());

View on GitHub (pinned to e1c734241f)

Solutions

  1. Use MAVEN or GRADLE as the build tool when requesting a wrapper
  2. Set includeBuildToolWrapper=false for unsupported build tools
  3. Check the BuildTool enum for supported values before calling

Example fix

// before
input.setBuildTool(SomeOtherBuildTool);
input.setIncludeBuildToolWrapper(true);
// after
input.setBuildTool(BuildTool.MAVEN);
input.setIncludeBuildToolWrapper(true);
Defensive patterns

Strategy: validation

Validate before calling

if (input.isIncludeBuildToolWrapper() && input.getBuildTool() != BuildTool.MAVEN && input.getBuildTool() != BuildTool.GRADLE) { throw new IllegalArgumentException("wrapper only supports maven/gradle"); }

Try / catch

try { catalog.select(projectInput, ...); } catch (IllegalArgumentException e) { if (e.getMessage().startsWith("Unsupported build tool wrapper")) { input.setIncludeBuildToolWrapper(false); catalog.select(projectInput, ...); } }

Prevention

When it happens

Trigger: Calling select (via CreateProject) with includeBuildToolWrapper=true and projectInput.getBuildTool() set to a value other than MAVEN or GRADLE (e.g. a custom/unsupported BuildTool enum value).

Common situations: Programmatic API users constructing a BuildTool value not covered by the wrapper tooling; passing 'maven' wrapper request for a custom build tool in embedded tooling.

Related errors


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