2010-07-22 47 views
23

Để phân tích cú pháp dòng lệnh trong Java, tôi thường sử dụng Apache Commons CLI. Ai có thể giới thiệu bất kỳ thư viện thay thế nào không?Phân tích cú pháp dòng lệnh: Commons CLI lựa chọn thay thế?

+7

Nếu bạn định yêu cầu thay thế cho những gì bạn thường sử dụng, sẽ hữu ích nếu bạn nói những gì bạn đang tìm kiếm mà tùy chọn thông thường của bạn không cung cấp. –

+1

Thành thật mà nói, tôi không có một tính năng mất tích cụ thể nào. Đúng, Apache Commons CLI là 'đã thử và thử nghiệm', nhưng nó cũng khá dài dòng. Tôi chỉ tự hỏi nếu có ai giới thiệu bất kỳ ý tưởng mới nào trong lĩnh vực này. Trong thể loại này, tôi nghĩ tôi sẽ xem xét kỹ hơn đề xuất JCommander bên dưới. – Jan

+6

có thể trùng lặp của [Có một trình phân tích đối số dòng lệnh tốt cho Java không?] (Http://stackoverflow.com/questions/367706/is-there-a-good-command-line-argument-parser-for-java) –

Trả lời

21

JCommander âm thanh như một cách tiếp cận rất đơn giản và thú vị để phân tích đối số dòng lệnh với các chú thích (từ tác giả của TestNG):

bạn chú thích các lĩnh vực với mô tả về lựa chọn của mình:

import com.beust.jcommander.Parameter; 

public class JCommanderTest { 
    @Parameter 
    public List<String> parameters = Lists.newArrayList(); 

    @Parameter(names = { "-log", "-verbose" }, description = "Level of verbosity") 
    public Integer verbose = 1; 

    @Parameter(names = "-groups", description = "Comma-separated list of group names to be run") 
    public String groups; 

    @Parameter(names = "-debug", description = "Debug mode") 
    public boolean debug = false; 
} 

và sau đó bạn chỉ cần yêu cầu JCommander để phân tích:

JCommanderTest jct = new JCommanderTest(); 
String[] argv = { "-log", "2", "-groups", "unit", "a", "b", "c" }; 
new JCommander(jct, argv); 

Assert.assertEquals(jct.verbose.intValue(), 2); 
+0

Đây là cách Cederic giới thiệu: http://beust.com/weblog/2010/07/13/announcing-jcommander-1-0/ – Jan

+0

Không thể tìm thấy API để in trợ giúp. Xem câu hỏi liên quan: http://stackoverflow.com/questions/30046171/how-to-print-help-using-jcommander –

+0

JCommander giờ đây đã ở đây http://jcommander.org/ – xamde

6

Câu trả lời này có hữu ích không? How to parse command line arguments in Java?

+0

Tôi đánh giá cao những liên kết này đến các khuôn khổ thay thế và tôi phải thừa nhận rằng tôi đã không nhận thấy câu hỏi này rất giống nhau.Tuy nhiên, tôi đã hy vọng đạt được một người * thực sự đã thử * các lựa chọn thay thế khác nhau và ai có thể * giới thiệu * một trong số đó. – Jan

+0

Về mặt này, đây là loại bài viết tôi đang tìm kiếm: http://furiouspurpose.blogspot.com/2008/07/command-line-parsing-libraries-for-java.html Cảm ơn bạn! – Jan

2

Tại java-source.net bạn có thể tìm thấy ít nhất 4 thư viện thay thế khác để Apache Commons CLI.

0

getopt-1.0.11 là một đơn giản dễ sử dụng thư viện nhẹ tôi đã sử dụng một lần cho đối số dòng lệnh phân tích

4

Cá nhân tôi sử dụng args4J kohsuke tại https://github.com/kohsuke/args4j

+0

Đó cũng là sở thích cá nhân của tôi. args4j linh hoạt hơn JCommander. Các nguyên tắc là như nhau, nhưng nó trực quan hơn để sử dụng và phân biệt giữa các đối số và các tùy chọn. –

0

Bạn có thể thử commandline (tên khá vô danh, tôi biết)

Nó sử dụng chú thích để lập bản đồ đối số dòng lệnh vào một mô hình đối tượng. Một vài phân tích cú pháp các chế độ và một tập hợp các chú thích có thể được kết hợp theo nhiều cách khác nhau cho phép bạn tạo các quy tắc tùy chọn dòng lệnh khá tiên tiến.

Mặc dù nó cho phép bạn ánh xạ các đối số dòng lệnh trực tiếp lên mô hình miền của mình, bạn nên cân nhắc sử dụng các lớp riêng biệt cho các đối số dòng lệnh.

Các vấn đề liên quan