t8y2/dbx · error · IllegalArgumentException

requires a value

Error message

 requires a value

What it means

The private value() helper throws IllegalArgumentException when an option flag (e.g. --coordinate, --scope, --repo, --local-repo) is present but has no following non-blank argument. The message is '<option> requires a value'.

Source

Thrown at plugins/jdbc/src/main/java/app/dbx/jdbc/maven/DbxMavenResolver.java:172

                            throw new IllegalArgumentException("Unsupported option: " + arg);
                        }
                        if (options.coordinate == null) {
                            options.coordinate = arg;
                        } else {
                            throw new IllegalArgumentException("Unexpected argument: " + arg);
                        }
                    }
                }
            }
            if (options.repositories.isEmpty()) {
                options.repositories.add(DEFAULT_REPOSITORY);
            }
            return options;
        }

        private static String value(String[] args, int index, String option) {
            if (index >= args.length || args[index].isBlank()) {
                throw new IllegalArgumentException(option + " requires a value");
            }
            return args[index];
        }
    }

    public record ResolveResult(
        String coordinate,
        String scope,
        List<String> repositories,
        List<ResolvedArtifact> artifacts
    ) {
    }

    public record ResolvedArtifact(
        String groupId,
        String artifactId,
        String version,
        String classifier,

View on GitHub (pinned to c0390bff16)

Solutions

  1. Supply the value directly after the flag: --scope runtime, --repo <url>
  2. Ensure the shell variable holding the value is set and non-empty
  3. Check CI pipeline logs for the command being truncated

Example fix

// before
mvn-ish resolve --scope $SCOPE com.example:foo:1.0   # SCOPE unset
// after
SCOPE=runtime DbxMavenResolver --scope "$SCOPE" com.example:foo:1.0
Defensive patterns

Strategy: validation

Validate before calling

for (int i = 0; i < args.length; i++) {
    if (List.of("--coordinate","--scope","--repo","--local-repo").contains(args[i])
            && (i + 1 >= args.length || args[i+1].isBlank())) {
        throw new IllegalArgumentException(args[i] + " requires a value");
    }
}

Try / catch

try {
    Options o = Options.parse(args);
} catch (IllegalArgumentException e) {
    System.err.println(e.getMessage());
    System.exit(2);
}

Prevention

When it happens

Trigger: Ending the command line with a flag and no value, e.g. '--repo' as the last token, or passing '--scope ' with a blank value.

Common situations: Truncated command in CI config; shell variable expanding to empty (e.g. --scope $SCOPE with SCOPE unset); newline-separated arguments mis-split by a script.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of t8y2/dbx@c0390bff16 (2026-09-05). Data as JSON: /api/errors/e55eb8b751472b6f. Report an issue: GitHub.