8

Tôi sử dụng Apache Commons CLI để phân tích đối số dòng lệnh.Apache Commons CLI muliple giá trị đối số tên trong tùy chọn -help

Tôi đang tìm cách hiển thị nhiều tên giá trị đối số trong trợ giúp. Dưới đây là một ví dụ cho một đối số của tùy chọn "startimport":

Option startimport = OptionBuilder 
       .withArgName("environment") 
       .hasArg() 
       .withDescription(
         "Description") 
       .create("startimport"); 

Khi tôi sử dụng -help nó in ra:

-startimport <environment>     Description 

Thatfs tốt. Nhưng nếu tôi muốn sử dụng hai đối số thì sao?

Option startimport = OptionBuilder 
       .withArgName("firstArg secondArg") 
       .hasArgs(2) 
       .withDescription("Description") 
       .create("startimport "); 

Phân tích hai đối số không phải là vấn đề nhưng tôi muốn đầu ra sau trong "-help":

startimport <firstArg> <secondArg>     Description 

Nhưng hiện tại tôi chỉ có thể nhận được:

startimport <firstArg secondArg>     Description 

Is có một giải pháp thích hợp cho vấn đề đó?

Trả lời

9

Tôi đã sử dụng một cách nghịch ngợm để giải quyết vấn đề này.

OptionBuilder.hasArgs(3); 
    OptionBuilder.withArgName("hostname> <community> <oid"); 
    OptionBuilder.withDescription("spans switch topology. Mutually exclusive with -s"); 
    Option my_a = OptionBuilder.create("a"); 

Nó xuất hiện chính xác trong trợ giúp ngay bây giờ. Mặc dù tôi không chắc chắn nếu điều này có hậu quả mặc dù.

24

Tôi đã tìm ra cách để giải quyết vấn đề này theo cách hành xử một cách chính xác và nghĩ rằng tôi muốn chia sẻ vì đây là một trong những trang mà Google đã dẫn tôi đến khi nghiên cứu. Mã này được viết bằng Commons CLI 1.2.

Option searchApp = OptionBuilder.withArgName("property> <value") 
      .withValueSeparator(' ') 
      .hasArgs(2) 
      .withLongOpt("test") 
      .withDescription("This is a test description.") 
      .create("t"); 

Thông điệp giúp đỡ trông giống như:

-t,--test <property> <value> This is a test description. 

Nó có thể được sử dụng từ dòng lệnh như thế này:

java -jar program.jar -t id 5 

và một String [] của các đối số có thể được lấy ra trong như sau:

Options options = new Options(); 
options.addOption(searchApp); 
PosixParser parser = new PosixParser(); 
CommandLine cmd = parser.parse(options, args); 
String[] searchArgs = cmd.getOptionValues("t"); 

Sau đó, bạn có thể truy xuất các giá trị với searchArgs[0]searchArgs[1].