Jetty のパラメータをコマンド引数で受け取れるようにした。
CLIのインタフェースが以前使ったときに比べて少し変わっていた。
以前は、OptionBuilder? というオブジェクトで、コマンド引数を定義していたが、新しい CLI では次のとおり
package com.example.jetty;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
/**
* Startup class for Jetty Web Server.
*
* @author atsushihondoh
*/
@Slf4j
public class Main {
private static final String ARG_PORT = "p";
private static final String ARG_HELP = "h";
private static final String ARG_SHUTDOWN_TOKEN = "t";
private static final String DEFAULT_PORT = "8080";
private static final String DEFAULT_SHUTDOWN_TOKEN = "admin";
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// ---------- 1. Definitions of command arguments ----------
Options options = new Options();
// Command Option "p" (port number)
Option srcOption = Option.builder(ARG_PORT)
.longOpt("port")
.hasArg()
.required(false)
.argName("PORT")
.desc(String.format("default : %s", DEFAULT_PORT))
.build();
options.addOption(srcOption);
// Command Option "t" (shutport token)
Option tokenOption = Option.builder(ARG_SHUTDOWN_TOKEN)
.longOpt("token")
.hasArg()
.required(false)
.argName("SHUTDOWN TOKEN")
.desc(String.format("default : %s", DEFAULT_SHUTDOWN_TOKEN))
.build();
options.addOption(tokenOption);
// Command Option "h" (help)
Option helpOption = Option.builder(ARG_HELP)
.longOpt("help")
.argName("help")
.desc("Show this help")
.build();
options.addOption(helpOption);
// ---------- 2. Check Command Argument ----------
CommandLineParser parser = new DefaultParser();
CommandLine cmd;
try {
cmd = parser.parse(options, args);
} catch (org.apache.commons.cli.ParseException ex) {
// If there are some errors in the argument, show help and end.
HelpFormatter help = new HelpFormatter();
help.printHelp(Main.class.getName(), options, true);
return;
}
if (cmd.hasOption(ARG_HELP)) {
// show help and end.
HelpFormatter help = new HelpFormatter();
help.printHelp(Main.class.getName(), options, true);
return;
}
// ---------- 3.Read the command argument ----------
MyServer myserver = new MyServer();
myserver.setPort(Integer.parseInt(cmd.getOptionValue(ARG_PORT, DEFAULT_PORT)));
myserver.setShutdownToken(cmd.getOptionValue(ARG_SHUTDOWN_TOKEN, DEFAULT_SHUTDOWN_TOKEN));
Thread th = new Thread(myserver);
th.start();
Thread sh = new Thread(()->{
myserver.stop();
});
Runtime.getRuntime().addShutdownHook(sh);
}
}