{"record":{"id":"21f607aacbdf24ce","repo":"quarkusio/quarkus","slug":"failed-to-parse-maven-command-line-arguments","errorCode":null,"errorMessage":"Failed to parse Maven command line arguments","messagePattern":"Failed to parse Maven command line arguments","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/options/BootstrapMavenOptionsParser.java","lineNumber":102,"sourceCode":"                        if (parsedI < args.length) {\n                            parsedValue = args[parsedI++];\n                        } else {\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n\n        if (argsWoProps != null) {\n            args = argsWoProps.toArray(new String[0]);\n        }\n\n        final CommandLine cmdLine;\n        try {\n            cmdLine = new CLIManager().parse(args);\n        } catch (ParseException e) {\n            throw new IllegalStateException(\"Failed to parse Maven command line arguments\", e);\n        }\n\n        final Map<String, Object> map = new HashMap<>();\n        put(cmdLine, map, CLIManager.ALTERNATE_USER_SETTINGS);\n        put(cmdLine, map, CLIManager.ALTERNATE_GLOBAL_SETTINGS);\n        put(cmdLine, map, CLIManager.ALTERNATE_POM_FILE);\n        put(map, String.valueOf(CLIManager.ACTIVATE_PROFILES), cmdLine.getOptionValues(CLIManager.ACTIVATE_PROFILES));\n\n        putBoolean(cmdLine, map, CLIManager.OFFLINE);\n        putBoolean(cmdLine, map, CLIManager.SUPRESS_SNAPSHOT_UPDATES);\n        putBoolean(cmdLine, map, CLIManager.UPDATE_SNAPSHOTS);\n        putBoolean(cmdLine, map, CLIManager.CHECKSUM_FAILURE_POLICY);\n        putBoolean(cmdLine, map, CLIManager.CHECKSUM_WARNING_POLICY);\n        putBoolean(cmdLine, map, CLIManager.BATCH_MODE);\n        putBoolean(cmdLine, map, CLIManager.NO_TRANSFER_PROGRESS);\n\n        if (userProps != null) {\n            put(map, String.valueOf(CLIManager.SET_SYSTEM_PROPERTY), userProps);","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/bootstrap/maven-resolver/src/main/java/io/quarkus/bootstrap/resolver/maven/options/BootstrapMavenOptionsParser.java#L84-L120","documentation":"BootstrapMavenOptionsParser.parse(args) mimics Maven's CLI parsing using a CLIManager (commons-cli based). If commons-cli throws a ParseException - an unrecognized option or a missing argument for an option that requires one - it throws IllegalStateException 'Failed to parse Maven command line arguments'.","triggerScenarios":"Passing args to BootstrapMavenOptionsParser.parse(String[]) that Maven's CLIManager cannot parse: an option unknown to that Maven version (e.g. -lll typo), an option missing its required value (e.g. -s without a path), or malformed grouped short options.","commonSituations":"Typos in flags handed to the bootstrap resolver, arguments from older/newer Maven versions not recognized by the embedded CLIManager, splitting a flag and its value into separate incorrectly ordered entries, whitespace/quoting issues upstream in parse().","solutions":["Read the wrapped ParseException cause - it names the unparsed option or missing argument - and correct that flag","Compare against `mvn --help` for the installed Maven version; remove or fix unsupported options","Ensure each option that takes a value is followed by it (e.g. -s /path/settings.xml, not just -s)","Validate the argument list before calling parse() by reusing the same CLIManager in a pre-check"],"exampleFix":"// before\nparser.parse(new String[]{\"-s\"});  // -s requires a value\n// after\nparser.parse(new String[]{\"-s\", \"/home/user/.m2/settings.xml\"});","handlingStrategy":"validation","validationCode":"// Reject obviously malformed args before parsing\nfor (String arg : args) {\n    if (arg.startsWith(\"-\") && arg.length() > 1 && !arg.matches(\"-[a-zA-Z].*\")) {\n        throw new IllegalArgumentException(\"Suspicious option token: \" + arg);\n    }\n}","typeGuard":null,"tryCatchPattern":"try {\n    Map<String, Object> opts = BootstrapMavenOptionsParser.parse(args);\n} catch (IllegalStateException e) {\n    log.error(\"Bad Maven CLI args \" + Arrays.asList(args) + \"; cause: \" + e.getCause());\n    throw e;\n}","preventionTips":["Check flags against `mvn --help` for the exact Maven version in use","Always supply values immediately after options that require them (-s, -gs, -f, -D)","Fix arg-splitting upstream so flags and values stay paired","Copy options from working mvn invocations rather than from memory"],"tags":["command-line","parsing","maven"],"backgroundTag":"invalid-command-line","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}