Tôi không thấy cách kiểm tra chuẩn nếu tất cả Tùy chọn được cung cấp trong đầu vào Chuỗi [] đến thư viện CLI của apache. Đó là - các tùy chọn của tôi là tất cả REUIRED tại dòng lệnh, nếu không, tôi muốn một ngoại lệ để ném.Làm thế nào để đảm bảo rằng tất cả các đối số được cung cấp trong Apache Commons CLI?
Im cố gắng sau như một cách giải quyết, nhưng nhận được một ngoại lệ Nullpointer trong câu lệnh if ...
PosixParser p = new PosixParser();
CommandLine cli=p.parse(options,args);
for(Object o : options.getOptions())
{
Option op = (Option)o;
if(cli.getOptionValue(op.getName()))
throw new ParseException("Missing argument ! " + op.getArgName() + ":"+op.getDescription());
}
CẬP NHẬT NÀY: phương pháp getopt() dường như cung cấp các đối số tên viết tắt.
Tuy nhiên, nếu tôi thay thế op.getName() bằng opt.getLongName() ... nó hoạt động!
Trong mọi trường hợp .. Tôi có 2 câu hỏi:
1) Tại sao sẽ là một lựa chọn có tên null, chưa một longname không null?
2) Có cách nào đơn giản đảm bảo rằng tất cả các tùy chọn được cung cấp String []? Ví dụ, tôi muốn gọi:
if(! options.isAllProvided())
throw new ParseException("You are missing some options ! " + StringUtils.join(userInputArray,','));
Chỉ cần nhận thấy: Để có được một tùy chọn bằng tên ngắn của nó, bạn gọi getOpt(), chứ không phải getArgName() hoặc bất kỳ phương thức nào khác. – jayunit100