有哪些优秀的Java库可用于构建命令行应用程序?

44

我需要使用Java编写一个简单的命令行应用程序。最好使用一个库来解析命令,并处理像标志和可选/必需参数等事项...

更新

如果内置TAB自动完成功能,那将是非常好的。


3
通常,CLI指的是您的应用程序从命令行接受参数以确定如何运行。根据您的更新,您是希望在Java应用程序内部拥有类似于irb的交互式shell式进程吗? - Alex B
1
是的,我确实这么做了...你说得对。 - carrier
1
irb 是交互式 Ruby。我认为您可以另外提问,避免使用“命令行”或“CLI”这个短语。也许可以这样问:“有没有用于创建 Java 交互式 shell 的库?”并且为了清晰起见,给出您的应用程序的示例用法。 - Alex B
Spring Shell 看起来很不错。 - Edwin Dalorzo
1
这是一个很好的问题,值得放在http://softwarerecs.stackexchange.com/上。 - Derek Mahar
9个回答

29

我曾使用过Apache Commons CLI库来解析命令行参数。它相当容易使用,并且有相当不错的文档

你选择哪个库可能取决于你喜欢哪种风格的选项(“--gnu-style”还是“-javac-style”)。


21

JLine 看起来很有用。

JLine是一个处理控制台输入的Java库,功能与BSD editline和GNU readline类似。熟悉现代shell(例如bash和tcsh)的readline/editline功能的人会发现JLine的大多数命令编辑功能都很熟悉。

而且它在功能特性中列出了选项卡完成。


+1;对我来说,readline 是首先想到的东西,而这似乎是 Java 的等效物。 - Adam Jaskiewicz

8

如果您正在寻找一个可以方便开发交互式shell应用程序的库,我建议使用Cliche


1
"cliche"非常简单但功能强大。我推荐它。 - Benj
它会支持密码屏蔽吗? - Shineed Basheer

4
在我们公司,我们使用JewelCli,它使用带注释的Java接口定义以声明式风格描述命令行界面。
轻巧简单易用,我会推荐它。

jewelcli 没有 Tab 自动补全功能,它只是一个基本(但非常好用)的命令行参数解析器。 - Julien Hoarau

3
我已广泛使用Java Simple Argument Parser。它处理各种选项类型,具有良好的设计和库(包括编写自定义解析器的选项),并在JavaDocs和在线文档中提供了良好的文档。
我认为您对制表符补全的需求将由shell而非命令行解析库处理。

1

我尝试了几个库,最终选择使用argparse4j。它是Python的argparse的一个非常好的Java移植版。


1

有一个Java版的GNU getopt库可用于命令行解析。对于命令编辑和TAB自动完成,可以使用JLine(正如mmyers已经推荐的那样)。


1

同时也值得关注--jopt-simple

它试图遵循POSIX getopt()和GNU getopt_long()的命令行选项语法。它似乎在社区中有一些影响力,特别是成为OpenJDK的首选命令行解析库。

此外,正如Brett所提到的,制表符补全通常由您的shell提供-您可以编写shell函数来提供所需的功能。

p.s. 对于重复的答案我很抱歉,但这个问题几乎与Java library for parsing command-line parameters?相同。


0

我使用过JSAP。我发现它很稳定,文档也很好。

我不确定你所说的“内置TAB完成”是什么意思。你能详细说明一下吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接