0

我试图获取以下命令行配置:

myprogram.jar --op1 --other parameters  OK  
myprogram.jar --other parameters --op2  OK  
myprogram.jar --op1 --op2 should launch ParameterException

我不想设置--operation=[1|2]因为它们是非常不同类型的操作
有没有办法获得这个JCommander

4

1 回答 1

1

我认为您正在寻找的是全局验证参数。

不幸JCommander的是不支持它,带有简单的注释。如其文档中所示:http: //jcommander.org/#_global_parameter_validation

为此,您需要在解析参数后编写自己的验证器,例如以下示例:

import com.beust.jcommander.JCommander;
import com.beust.jcommander.Parameter;
import com.beust.jcommander.ParameterException;

class Main {
    @Parameter(names = "-op1")
    private final boolean op1 = false;

    @Parameter(names = "-op2")
    private final boolean op2 = false;

    public static void main(String[] args) {
        Main main = new Main();
        JCommander.newBuilder()
                .addObject(main)
                .build()
                .parse(args);
        main.run();
    }

    public void run() {
        if (op1 && op2) {
            throw new ParameterException("Choose only either op1 or op2, but not both");
        }
    }
}
于 2022-01-07T08:54:15.467 回答