{"record":{"id":"0d3d5519cd8f9bec","repo":"quarkusio/quarkus","slug":"either-the-extension-or-extensions-parameter-m-0d3d55","errorCode":null,"errorMessage":"Either the `extension` or `extensions` parameter must be set","messagePattern":"Either the `extension` or `extensions` parameter must be set","errorType":"validation","errorClass":"MojoExecutionException","httpStatus":null,"severity":"error","filePath":"devtools/maven/src/main/java/io/quarkus/maven/RemoveExtensionMojo.java","lineNumber":43,"sourceCode":"public class RemoveExtensionMojo extends QuarkusProjectMojoBase {\n\n    /**\n     * The list of extensions to be removed.\n     */\n    @Parameter(property = \"extensions\")\n    Set<String> extensions;\n\n    /**\n     * For usability reason, this parameter allows removing a single extension.\n     */\n    @Parameter(property = \"extension\")\n    String extension;\n\n    @Override\n    protected void validateParameters() throws MojoExecutionException {\n        if ((StringUtils.isBlank(extension) && (extensions == null || extensions.isEmpty())) // None are set\n                || (!StringUtils.isBlank(extension) && extensions != null && !extensions.isEmpty())) { // Both are set\n            throw new MojoExecutionException(\"Either the `extension` or `extensions` parameter must be set\");\n        }\n    }\n\n    @Override\n    public void doExecute(final QuarkusProject quarkusProject, final MessageWriter log) throws MojoExecutionException {\n\n        Set<String> ext = new HashSet<>();\n        if (extensions != null && !extensions.isEmpty()) {\n            ext.addAll(extensions);\n        } else {\n            // Parse the \"extension\" just in case it contains several comma-separated values\n            // https://github.com/quarkusio/quarkus/issues/2393\n            ext.addAll(Arrays.stream(extension.split(\",\")).map(s -> s.trim()).collect(Collectors.toSet()));\n        }\n\n        try {\n            final QuarkusCommandOutcome outcome = new RemoveExtensions(quarkusProject)\n                    .extensions(ext.stream().map(String::trim).collect(Collectors.toSet()))","sourceCodeStart":25,"sourceCodeEnd":61,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/devtools/maven/src/main/java/io/quarkus/maven/RemoveExtensionMojo.java#L25-L61","documentation":"This MojoExecutionException is thrown by RemoveExtensionMojo.validateParameters when the quarkus:remove-extension goal receives neither or both of the mutually exclusive extension parameters: single `extension` and list `extensions`. Exactly one must be provided; the goal refuses to guess the user's intent.","triggerScenarios":"Running mvn quarkus:remove-extension with no -Dextension/-Dextensions, or supplying both -Dextension=\"rest\" and -Dextensions=\"rest,jackson\" in the same invocation.","commonSituations":"Copy-pasting commands with leftover flags; CI scripts setting defaults in .mvn/maven.config that collide with explicit CLI args; forgetting the argument entirely.","solutions":["Provide exactly one parameter: -Dextensions=\"rest,jackson\" for multiple, or -Dextension=\"rest\" for a single extension","Remove the conflicting duplicate flag from the command line or .mvn/maven.config/CI defaults","Configure the extension(s) in the plugin <configuration> block instead of mixing both properties"],"exampleFix":"// before\nmvn quarkus:remove-extension -Dextension=\"rest\" -Dextensions=\"rest,jackson\"\n// after\nmvn quarkus:remove-extension -Dextensions=\"rest,jackson\"","handlingStrategy":"validation","validationCode":"String extension = System.getProperty(\"extension\");\nString extensions = System.getProperty(\"extensions\");\nboolean noneSet = (extension == null || extension.isBlank()) && (extensions == null || extensions.isBlank());\nboolean bothSet = extension != null && !extension.isBlank() && extensions != null && !extensions.isBlank();\nif (noneSet || bothSet) {\n    throw new IllegalArgumentException(\"Set exactly one of -Dextension or -Dextensions\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Standardize on -Dextensions for all add/remove-extension invocations","Check .mvn/maven.config and CI defaults for conflicting flags","Avoid mixing plugin <configuration> values with CLI properties","Read the goal's help (mvn quarkus:help) before scripting parameterized invocations"],"tags":["maven","parameter-validation","cli-usage","remove-extension"],"backgroundTag":"missing-or-conflicting-mojo-parameter","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}