public static void main(String[] args) {
Options options = new Options();
Option hostOption = Option.builder("h")
.longOpt("host")
.required(false)
.build();
Option portOption = Option.builder("p")
.longOpt("port")
.required(false)
.type(Number.class)
.build();
Option serviceNameOption = Option.builder("n")
.longOpt("service_name")
.required(false)
.build();
options.addOption(hostOption);
options.addOption(portOption);
options.addOption(serviceNameOption);
String serviceName = "dbservice"
String host = "localhost";
int port = 7512;
CommandLineParser parser = new DefaultParser();
Server server = new Server();
try {
CommandLine cmd = parser.parse(options, args);
if(cmd.hasOption("host")) {
host = cmd.getOptionValue("host");
System.out.println(host); //gets in here but prints null
}
if (cmd.hasOption("port")) {
port = ((Number)cmd.getParsedOptionValue("port")).intValue();
System.out.println(port); // gets in here but throws a null pointer exception
}
if (cmd.hasOption("service_name")) {
serviceName = cmd.getOptionValue("service_name");
System.out.println(serviceName); // gets in here but prints null
}
} catch(Exception e) {}
}
Ich benutze Apache Commons CLI-Bibliothek zum Parsen von Befehlszeilenargumente, aber es scheint nicht wie erwartet zu parsen. Nicht sicher, was ich hier vermisse?Apache commons CLI analysiert nicht wie erwartet?
Ich habe auf viele verschiedene Arten aufgerufen, nur um zu sehen, ob es funktioniert und der folgende ist einer von ihnen java -jar dbservice.jar --host localhost --port 7514
. Was ist der richtige Weg? Ich sehe das nicht in der Dokumentation
Ich glaube, wenn Sie eine Option (wie localhost oder Port-Nummer) nehmen, müssen Sie dem Gulden angeben, dass es ein Argument braucht. Versuchen Sie, dem Builder vor dem Build() .hasArg (true) hinzuzufügen. – KevinO