簡體   English   中英

Apache Commons CLI無法按預期進行解析?

[英]Apache commons CLI not parsing as expected?

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) {}
 }

我正在使用Apache commons cli庫來解析命令行args,但是它似乎沒有按預期進行解析。 不知道我在這里想念什么嗎?

我以多種不同的方式調用它只是為了看看它是否有效,下面是其中之一java -jar dbservice.jar --host localhost --port 7514 無論如何,正確的調用方法是什么? 我沒有在文檔中看到

為了使Option接受參數,必須將hasArg(true)傳遞給構建器。 對於每個選項,添加一個“ .hasArg(true)”。 使用此參數修改代碼並運行測試用例會產生預期的輸出。

    Option hostOption = Option.builder("h")
        .longOpt("host")
        .required(false)
        .hasArg(true)
        .build();

對於第一次使用hasArg()的用戶來說,這是令人困惑的,默認情況下,您會假設不指定hasArg(),將至少使用一個參數來創建選項。 傳遞一個沒有hasArg()的值'--opt val'會無聲地忽略該val,就像沒有傳遞任何東西一樣。如果沒有指定hasArg(),則它將失敗,因為傳遞了一些內容而不是忽略了它。 可能會有嚴格的模式嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM