Options

The @Option annotation defines command-line options (flags with values).

Properties

PropertyTypeDefaultDescription
nameString""Option name (variable name if empty)
shortNamechar'\u0000'Short name (e.g., -v)
descriptionString""Help description
argumentString""Value type description
requiredbooleanfalseIs option required?
hasValuebooleantrueDoes option accept a value?
defaultValueString[]{}Default values
askIfNotSetbooleanfalsePrompt user if not set
overrideRequiredbooleanfalseOverride required validation
acceptNameWithoutDashesbooleanfalseAllow option name without -- prefix
converterClass<? extends Converter>NullConverter.classCustom value converter
completerClass<? extends OptionCompleter>NullOptionCompleter.classCustom completer
validatorClass<? extends OptionValidator>NullValidator.classCustom validator
activatorClass<? extends OptionActivator>NullActivator.classCustom activator
rendererClass<? extends OptionRenderer>NullOptionRenderer.classCustom renderer
parserClass<? extends OptionParser>AeshOptionParser.classCustom parser

Basic Example

@CommandDefinition(name = "greet")
public class GreetCommand implements Command<CommandInvocation> {

    @Option(shortName = 'n', description = "Name to greet")
    private String name;

    @Override
    public CommandResult execute(CommandInvocation invocation) {
        invocation.println("Hello, " + name + "!");
        return CommandResult.SUCCESS;
    }
}

Usage: greet --name Alice or greet -n Alice

Boolean Flags

For boolean fields, hasValue can be false:

@Option(shortName = 'v', hasValue = false, description = "Verbose output")
private boolean verbose;

Usage: greet -v or greet --verbose

Required Options

@Option(required = true, description = "Required file path")
private String filePath;

Default Values

@Option(defaultValue = "INFO", description = "Log level")
private String logLevel;

Custom Types with Converter

@Option(converter = PathConverter.class, description = "Directory path")
private Path directory;

public static class PathConverter implements Converter<Path> {
    @Override
    public Path convert(String input) {
        return Paths.get(input);
    }
}

Short Names

The shortName defines the single-character option:

@Option(name = "verbose", shortName = 'v', description = "Verbose mode")
private boolean verbose;

Both --verbose and -v work.