是否有有助于构建命令行应用程序的良好 Java 库? [关闭]

Posted

技术标签:

【中文标题】是否有有助于构建命令行应用程序的良好 Java 库? [关闭]【英文标题】:Are there good Java libraries that facilitate building command-line applications? [closed] 【发布时间】:2010-09-30 22:44:42 【问题描述】:

我需要用 Java 编写一个简单的命令行应用程序。使用一个负责解析命令并负责标志和可选/强制参数之类的库会很好......

更新

具有内置 TAB 补全功能的东西会特别棒。

【问题讨论】:

通常 CLI 意味着您的应用程序从命令行获取参数以确定以何种方式运行。根据您的更新,您的意思是您想在您的 java 应用程序中拥有一个交互式 shell 风格的进程吗? (像 irb?) 是的,我确实...你是对的 irb 是交互式红宝石。我认为您会从不使用“命令行”或“cli”短语的情况下重新提出问题中受益。也许“是否有库可以在 java 中创建交互式 shell?”并举例说明您的应用的用法。 Spring Shell 看起来不错。 这是一个很好的问题,值得关注softwarerecs.stackexchange.com。 【参考方案1】:

我使用Apache Commons CLI library 进行命令行参数解析。它相当容易使用并且有reasonably good documentation。

您选择哪个库可能取决于您喜欢哪种样式的选项(“--gnu-style”或“-javac-style”)。

【讨论】:

【参考方案2】:

JLine 看起来很有帮助。

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

它确实在其features 中列出了选项卡完成。

【讨论】:

+1; readline 是我首先想到的,这似乎是 Java 的等价物。【参考方案3】:

当您正在寻找可简化交互式 shell 应用程序开发的库时,我建议您使用 Cliche。

【讨论】:

cliche 非常简单但非常强大。我推荐它。 是否支持密码屏蔽【参考方案4】:

在我们公司,我们使用JewelCli,它使用带注释的 Java 接口定义以声明式的方式描述命令行接口。

轻巧易用,我会推荐它。

【讨论】:

jewelcli 没有制表符补全,它只是一个基本(但很棒)的命令行参数解析器。【参考方案5】:

我已经广泛使用了Java Simple Argument Parser。它处理各种选项类型,具有精心设计的库(包括编写自定义解析器的选项),并在 JavaDocs 和 online 中提供了良好的文档。

我认为你对制表符完成的渴望将由 shell 而不是命令行解析库来处理。

【讨论】:

【参考方案6】:

有一个Java port of GNU getopt library 用于命令行解析。对于命令编辑和 TAB 完成,有 JLine(正如 mmyers 已经推荐的那样)。

【讨论】:

【参考方案7】:

--jopt-simple 也值得一看。

它“尝试遵守 POSIX getopt() 和 GNU getopt_long() 的命令行选项语法。” 它似乎有一些社区吸引力,特别是作为OpenJDK 选择的命令行解析库。

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

附言抱歉重复的答案,但这个问题与Java library for parsing command-line parameters?几乎相同

【讨论】:

【参考方案8】:

我尝试了几个库并最终使用了argparse4j。这是 Python 的 argparse 的一个非常好的 Java 端口。

【讨论】:

【参考方案9】:

我用过JSAP。我发现它很稳定并且有据可查。

我不确定我理解您所说的“内置 TAB 完成”是什么意思。能详细点吗。

【讨论】:

以上是关于是否有有助于构建命令行应用程序的良好 Java 库? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

是否有设计良好、维护良好的 Java 决策树学习库?

在命令行中正确链接库

Sass ,Scss 简单教程

使用 NSTask 执行离子构建命令 - 无法访问启动路径

无法在命令行上将 Netbeans 生成的 .java 文件编译成 .class

命令行的库构建失败,连接错误