我尝试使用 Common CLI 解析简单的参数,但收到 ParseException。
这是我的代码:
@SuppressWarnings("static-access")
public class CmdParsingTest {
private static final Options options;
static {
options = new Options();
options.addOption(OptionBuilder.withLongOpt("schema-file")
.withDescription("path to schema file")
.hasArg()
.withArgName("schemaFile")
.create("source"));
options.addOption( OptionBuilder.withLongOpt("state-url")
.withDescription("state url")
.hasArg()
.withArgName("stateUrl")
.create("url"));
options.addOption( OptionBuilder.withLongOpt("update-number")
.withDescription("update number to start from")
.hasArg()
.withArgName("updateNum")
.create("update"));
options.addOption(OptionBuilder.withLongOpt("result-file")
.withDescription("use given file to save result")
.hasArg()
.withArgName("resultFile")
.create("result"));
}
public static void main(String[] args) {
args = new String[]{
"-source /home/file/myfile.txt",
"-url http://localhost/state",
"-result result.txt"};
// create the parser
CommandLineParser parser = new BasicParser();
try {
// parse the command line arguments
CommandLine cmd = parser.parse(options, args);
//other cool code...
}
catch( ParseException exp ) {
System.err.println( "Parsing of command line args failed. Reason: " + exp.getMessage() );
}
}
}
结果是:
命令行参数解析失败。原因:无法识别的选项:-source /home/file/myfile.txt
如果我使用不带破折号的 args,则不会引发异常,但cmd.hasOption("source")
返回 false。
PS> Usage sample 建议使用DefaultParser
,但它只会出现在 CLI 1.3 中(根据 1.3 JavaDoc)。