2009-01-12 16 views
36

Tôi cần viết một ứng dụng dòng lệnh đơn giản trong Java. Nó sẽ được tốt đẹp để sử dụng một thư viện mà sẽ chăm sóc của các lệnh phân tích và sẽ chăm sóc của những thứ như cờ và tùy chọn/thông số bắt buộc ...Có thư viện Java tốt để tạo điều kiện xây dựng các ứng dụng dòng lệnh không?

CẬP NHẬT

Cái gì đó đã được xây dựng trong hoàn TAB sẽ đặc biệt tuyệt vời.

+3

Thông thường CLI có nghĩa là ứng dụng của bạn lấy đối số từ dòng lệnh để xác định cách thức để chạy. Dựa trên cập nhật của bạn, bạn có nghĩa là bạn muốn có một quá trình kiểu shell tương tác bên trong ứng dụng java của bạn? (như irb?) –

+1

vâng tôi thực sự ... bạn đúng là – carrier

+1

irb là tương tác của ruby. Tôi nghĩ bạn sẽ được hưởng lợi từ việc hỏi lại câu hỏi của mình mà không sử dụng cụm từ "dòng lệnh" hoặc "cli". Có thể "Có thư viện để tạo một trình bao tương tác trong java?" và cung cấp ví dụ về cách sử dụng ứng dụng của bạn để làm rõ. –

Trả lời

25

Tôi đã sử dụng số Apache Commons CLI library để phân tích đối số dòng lệnh. Nó khá dễ sử dụng và có reasonably good documentation.

Thư viện nào bạn chọn có thể xuất hiện theo kiểu tùy chọn bạn thích ("kiểu -gnu" hoặc "kiểu -javac").

Cập nhật: picocli TAB completion gần đây đã có sẵn và có thể được quan tâm. Không nhận thức được bất kỳ thư viện phân tích cú pháp dòng lệnh nào khác cung cấp hoàn thành dòng lệnh được yêu cầu trong OP.

20

JLine có vẻ hữu ích.

JLine là thư viện Java để xử lý đầu vào bảng điều khiển. Nó tương tự như chức năng của BSD editline và GNU readline. Những người quen thuộc với khả năng readline/editline cho các shell hiện đại (như bash và tcsh) sẽ tìm thấy hầu hết các tính năng chỉnh sửa lệnh của JLine là quen thuộc.

Và hoàn thành danh sách tab trong số features.  

+0

+1; readline là điều đầu tiên tôi nghĩ đến, và điều này có vẻ tương đương với Java. –

4

Trong công ty chúng tôi, chúng tôi đang sử dụng JewelCli sử dụng định nghĩa giao diện Java có chú thích để mô tả Giao diện dòng lệnh theo kiểu khai báo.

Nhẹ và dễ sử dụng, tôi sẽ giới thiệu nó.

+0

Không hoàn thành tab cho jewelcli, nó chỉ là một trình phân tích cú pháp đối số dòng lệnh cơ bản (nhưng tuyệt vời). –

1

Có một số Java port of GNU getopt library để phân tích cú pháp dòng lệnh. Đối với chỉnh sửa lệnh và hoàn thành TAB có JLine (như mmyers đã được đề nghị).

3

Tôi đã sử dụng rộng rãi Java Simple Argument Parser. Nó xử lý tất cả các loại tùy chọn, có một thiết kế tốt và thư viện (bao gồm tùy chọn viết các trình phân tích cú pháp tùy chỉnh) và cung cấp tài liệu tốt cả trong JavaDocs và online.

Tôi nghĩ rằng mong muốn hoàn thành tab của bạn sẽ được quản lý bởi vỏ chứ không phải thư viện phân tích cú pháp dòng lệnh.

0

Tôi đã sử dụng JSAP. Tôi đã tìm thấy nó được ổn định và tài liệu tốt.

Tôi không chắc mình hiểu ý của bạn là "hoàn thành TAB tích hợp". Bạn có thể xây dựng.

1

Nó cũng đáng xem xét --jopt-simple.

Nó 'cố gắng tôn vinh các cú pháp tùy chọn dòng lệnh của POSIX getopt() và GNU getopt_long().' Dường như có một số lực kéo cộng đồng, đáng chú ý là dòng lệnh phân tích cú pháp lib của sự lựa chọn cho OpenJDK.

Ngoài ra, như Brett đã đề cập, hoàn thành tab thường được cung cấp bởi trình bao của bạn - bạn sẽ viết các hàm vỏ để cung cấp chức năng mong muốn đó.

p.s. Xin lỗi vì câu trả lời trùng lặp, nhưng câu hỏi này gần như giống hệt với Java library for parsing command-line parameters?

8

Khi bạn đang tìm kiếm thư viện giúp dễ dàng phát triển ứng dụng trình bao tương tác, tôi đề xuất Cliche.

+0

'cliche' là siêu đơn giản nhưng rất mạnh mẽ. Tôi khuyến khích điều đó. – Benj

0

Tôi đã thử một vài thư viện và kết thúc bằng cách sử dụng argparse4j. Đó là một cổng Java thực sự tốt đẹp của Python argparse.

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