We’re now heading into the final stages before we’ll tag an 1.0-alpha release. The master branch is fairly stable atm and the plan is to not change anything big in the upcoming weeks. We have released a snapshot version of 1.0 if you are eager to test. Just add this to your 'pom.xml':
<dependency>
<groupId>org.aesh</groupId>
<artifactId>aesh</artifactId>
<version>1.7</version>
</dependency>
'build.gradle' file.
dependencies {
compile group: 'org.aesh', name: 'aesh', version: '1.0-SNAPSHOT'
}
Æsh is a library to easily create commands. We recommend using annotations as the default way of adding metadata for your commands, but we also have a builder API if that is preferred. Some of our features:
-
Easy to use API to create everything from simple to advanced commands
-
Supports different types of options (list, group, single) and arguments
-
Builtin completors for default values, booleans and files
-
Supports multiple hierarcy of sub commands eg: git rebase/pull/++
-
All option values and arguments are automatically injected during execution
-
Possible to add custom validators, activators, completors, converters, renderers and parsers
-
Automatically generates help/info text based on the metadata provided
-
Can add and remove commands during runtime
-
All the readline functionality included in 'aesh-readline', eg:
-
Line editing
-
History (search, persistence)
-
Completion
-
Masking
-
Undo and Redo
-
Paste buffer
-
Emacs and Vi editing mode
-
Supports POSIX OS’s and Windows
-
Easy to configure (history file & buffer size, edit mode, streams, possible to override terminal implementations, etc)
-
Support standard out and standard error
-
Redirect
-
Alias
-
Pipeline
-
Æsh uses Maven (http://maven.apache.org) as its build tool.
import org.aesh.command.Command;
import org.aesh.command.CommandDefinition;
import org.aesh.command.CommandException;
import org.aesh.command.CommandResult;
import org.aesh.command.impl.registry.AeshCommandRegistryBuilder;
import org.aesh.command.invocation.CommandInvocation;
import org.aesh.command.parser.CommandLineParserException;
import org.aesh.command.registry.CommandRegistry;
import org.aesh.console.settings.Settings;
import org.aesh.console.settings.SettingsBuilder;
import org.aesh.readline.ReadlineConsole;
import java.io.IOException;
public class SimpleExample {
public static void main(String[] args) throws CommandLineParserException, IOException {
CommandRegistry registry = new AeshCommandRegistryBuilder()
.command(ExitCommand.class)
.create();
Settings settings = SettingsBuilder
.builder()
.commandRegistry(registry)
.build();
ReadlineConsole console = new ReadlineConsole(settings);
console.setPrompt("[simple@aesh]$ ");
console.start();
}
@CommandDefinition(name = "exit", description = "exit the program", aliases = {"quit"})
public static class ExitCommand implements Command {
@Override
public CommandResult execute(CommandInvocation commandInvocation) throws CommandException, InterruptedException {
commandInvocation.stop();
return CommandResult.SUCCESS;
}
}
}