Search code examples
javacommand-line-argumentsargs4j

args4j: How to make an argument required if another argument is/isn't given?


@Options(name="--in-file")
String fileName;

@Option(name="--table")
String table;

I would like to make the --table option be required if and only if no value is given for --in-file. How might I go about doing this? I know that there are some solutions (I think at least) where I can do this with multiple classes, but that seems like overkill for only two arguments in a simple program.

I know I can also manually check the values after the parsing is completed, but that seems to defeat the purpose of using args4j.


Solution

  • You can use forbids as you mentioned.

    @Options(name="--in-file", forbids{"--table"})
    String fileName;
    
    @Option(name="--table", forbids={"--in-file"})
    String table;
    

    And you can add check-condition in your class.

    if (fileName == null && table == null) {
        throw new CmdLineException();
    }
    

    You can set exception message same with message shown when required option set.