Command line
This page describes how to integrate Lamp with the command line, as well as what to expect out of it.
Setting up
Adding Lamp dependency
To add Lamp to your project, add the following (depending on your project structure):
<dependencies>
<!-- Required for all platforms -->
<dependency>
<groupId>io.github.revxrsal</groupId>
<artifactId>lamp.common</artifactId>
<version>[VERSION]</version>
</dependency>
<!-- CLI module -->
<dependency>
<groupId>io.github.revxrsal</groupId>
<artifactId>lamp.cli</artifactId>
<version>[VERSION]</version>
</dependency>
</dependencies>
Latest version:
Optional: Preserve parameter names
Lamp identifies parameters by their names and uses them to generate relevant command metadata. By default, Java does not preserve parameter names reflectively. You need to add the following to your project:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<compilerArgs>
<!-- Preserves parameter names -->
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
Supported CLI types
java.util.Scanner
in place of CommandActorjava.io.PrintStream
in place of CommandActor
Example
Execute and exit
public final class CLIApp {
public static void main(String[] args) {
var lamp = CLILamp.builder()
.build();
lamp.register(new PingCommand());
/* register all other commands here */
ConsoleActor actor = ActorFactory.defaultFactory().createForStdIo(lamp);
lamp.dispatch(actor, String.join(" ", args));
}
static class PingCommand {
@Command("ping")
public void ping(ConsoleActor actor) {
actor.reply("Pong!");
}
}
}
Poll console indefinitely
public final class CLIApp {
public static void main(String[] args) {
var lamp = CLILamp.builder()
.build();
lamp.register(new PingCommand());
/* register all other commands here */
// Call this to continuously read input from the console
//
// pollStdin() is CLIVisitors.pollStdin().
// we use static imports here for brevity.
lamp.accept(pollStdin());
}
static class PingCommand {
@Command("ping")
public void ping(ConsoleActor actor) {
actor.reply("Pong!");
}
}
}
Last updated
Was this helpful?