我应该使用什么库来处理我的 Java 程序的 CLI 参数?

软件推荐 爪哇 命令行
2021-10-31 22:48:30

对于用 Java 编写命令行应用程序,解析和管理参数和参数的最佳库是什么?

注意:这个问题是Stack Overflow 上这个封闭问题的更新版本

3个回答

picocli与其他 Java CLI 库不同:

  • 它被设计为包含在源代码中。这允许用户运行基于 picocli 的应用程序,而不需要 picocli 作为外部依赖项。
  • 在底层平台支持时使用 ANSI 颜色生成精美且易于定制的使用帮助。
  • 在受支持的平台上为您的 Java 命令行应用程序自动完成

使用帮助信息示例:

在此处输入图像描述

快速概览:

  • 轻松的命令行解析 - 只需注释字段
  • 强类型的一切 - 命令行选项以及位置参数
  • 完全支持 GNU 样式和 POSIX 集群短选项(因此它处理<command> -xvfInputFile得很好<command> -x -v -f InputFile
  • 一个允许最小、最大和可变参数数量的模型,例如"1..*""3..5"
  • 子命令
  • 适用于 Java 5 及更高版本
  • 结构良好的用户手册

使用帮助是您的应用程序的面孔,所以要有创意,玩得开心!

在此处输入图像描述

更新:

Picocli 也得到积极维护。自原始帖子以来,添加了许多新功能,例如:

  • 编程 API 和注释 API
  • 依赖注入容器集成
  • JLine 集成:委托给 AutoComplete 以实现您的命令的 Completer 实现
  • 接口方法可以用@Optionor注释@Parameters(picocli 创建一个返回匹配选项的合成实现)
  • 类方法可以用@Optionor注释@Parameters(这样你就可以验证选项和位置参数)
  • 支持@Command额外紧凑代码的方法
  • 资源包的国际化

免责声明:我是作者。

我推荐JOpt Simple它“尝试尊重 POSIX getopt() 和 GNU getopt_long() 的命令行选项语法。” 它具有社区吸引力,尤其是 OpenJDK 本身的首选命令行解析库。

为了比较,这里有一个相对最新的(截至 2015 年 1 月)用于相同目的的相关库列表。

我的选择是JCommander

截至 2016 年 10 月,必须开始一个新项目,最后决定以聪明的方式进行论证。刚刚比较了Jopt-simple、JCommander、args4j。

选择理由:只有 JCommander 和 args4j 有注解,只有 JOpt-simple 和 JCommander 有很好的教程。