2011-11-10 38 views
6

Trong args4j tôi xác định các tùy chọn như rằng:args4j: trong "cách sử dụng" cách sắp xếp Tùy chọn theo cách thủ công?

@Option(name="-host",usage="host to connect") 
@Option(name="-port",usage="port of the host") 
@Option(name="-idle",usage="idle") 

Tuy nhiên khi giúp đỡ được hiển thị args4j luôn luôn sử dụng bảng chữ cái theo thứ tự để nó in

-host - host to connect 
-idle - idle 
-port - port to connect 

Đây không phải là tiện lợi vì tôi muốn hiển thị tùy chọn bắt buộc đầu tiên. Ngoài ra, tôi muốn tự đặt hàng các tùy chọn vì một số tùy chọn (như máy chủ và cổng) nên đi cùng nhau.

Làm cách nào để kiểm soát thứ tự các tùy chọn trong args4j?

tôi đã tìm thấy cùng một câu hỏi hỏi 3 năm trước nhưng không trả lời http://markmail.org/message/xce6vitw6miywtos

Trả lời

2

Bạn có thể không phải với Args4j hiện tại (ít nhất là để hiểu biết của tôi) - nhưng vì nó là mã nguồn mở tôi sẽ khuyến khích bạn thực hiện nó cho mình và cố gắng để có được bản vá trong nguồn cho các phiên bản mới hơn.

Từ nguồn: org.kohsuke.args4j.CmdLineParser:

// for display purposes, we like the arguments in argument order, but the options in alphabetical order 
    Collections.sort(options, new Comparator<OptionHandler>() { 
     public int compare(OptionHandler o1, OptionHandler o2) { 
      return o1.option.toString().compareTo(o2.option.toString()); 
     } 
    }); 
+0

hiện tôi đang bận rộn với các dự án hoàn toàn khác (thậm chí không Java) nhưng sẽ tốt hơn nếu ai đó có thể làm điều đó :) – javapowered

0

Vấn đề này vẫn chưa được giải quyết sau 3 năm. Nhưng có một cách giải quyết khác.

CmdLineParser sử dụng danh sách để lưu trữ tùy chọn và danh sách được hiển thị bởi getOptions(), bạn có thể nhận danh sách và tự sắp xếp danh sách. Bởi vì danh sách được sắp xếp chỉ trong hàm tạo. Bạn có thể sắp xếp nó bất cứ lúc nào sau khi xây dựng CmdLineParser. Sau đó, đầu ra của printUsage() được đặt hàng.

Cách giải quyết này phụ thuộc vào việc triển khai CmdLineParser, vì vậy đây không phải là ví dụ hay để mô phỏng. Nhưng như một cách giải quyết, nó hoạt động, ít nhất là trên phiên bản hiện tại (2.0.28).

5

Bạn có thể đặt sắp xếp thông qua ParserProperties và sau đó sử dụng nó trong hàm tạo CmdLineParser. Nếu bạn đặt OptionSorter null, thứ tự lựa chọn sẽ được duy trì:

ParserProperties properties = ParserProperties.defaults(); 
properties.withOptionSorter(null); 
CmdLineParser parser = new CmdLineParser(YOUR_OPTIONS_CLASS, properties); 

Vì vậy, trong ví dụ của câu hỏi mà bạn sẽ nhận được:

-host - host to connect 
-port - port to connect 
-idle - idle 
Các vấn đề liên quan