Arg Parser

Arg Parser

💡 原文中文,约1900字,阅读约需5分钟。
📝

内容提要

这篇文章介绍了作者在开发一个词法分析器项目时遇到的命令行参数传递问题。作者提到对于Python程序,内置的命令行解释工具argparse已经足够好用,但是Java标准库中没有类似的组件。作者介绍了自己开发的ArgParser工具,可以处理各种命令行设计,包括option、with option、switch和args等。作者表示目前的ArgParser已经满足了自己的需求。

🔎

延伸解读

Java 命令行解析的现状与替代方案

文章指出 Java 标准库缺乏类似 Python argparse 的命令行解析组件,作者已知 Apache Commons CLI 可能是一个选择,但因其特定需求(如与 jaskell try 机制配合、构造方便、支持常用命令行设计风格)而选择自行开发 ArgParser。这反映了在 Java 生态中,开发者常需根据项目技术栈和习惯评估现有库或自建工具。

ArgParser 的设计特点与使用约束

ArgParser 支持 option、with option、switch 和 args 四类参数。其中 option 可设默认值、必需性、值范围及多次传入聚合;with option 通过 --with-xxx/--without-xxx 设定;switch 通过 --enable-xxx/--disable-xxx 控制;args 为无名参数,可隐含数量约束和默认值,且 required args 应位于最前,有默认值的位于最后。这些设计覆盖了常见命令行风格,但使用时需遵循参数顺序规则。

实际应用与帮助功能

ArgParser 已应用于作者的 oliva 项目中的 lora 数据生成工具,示例中定义了 source 和 target 两个必需 option,并设置了 header、formatter 和 footer。所有显式参数支持 help 文本,内置 --help 和 -h 识别,可输出参数文档,还允许为参数名设置缩写(如 --source 设为 -s)。这表明该工具在满足作者需求的同时,也注重了用户体验和文档化。

❓

Q&A

ArgParser工具的主要功能是什么?

ArgParser工具可以处理多种命令行设计,包括option、with option、switch和args,支持参数值、默认值、必需或可选参数等功能。

为什么作者选择开发ArgParser而不是使用现有的Java库?

作者认为Java标准库缺乏类似于Python的argparse工具,因此希望开发一个符合自己需求的命令行参数解析工具。

ArgParser如何处理无名参数?

ArgParser允许无名参数,并可以设置隐含的要求约束,例如某些操作必须提供特定的无名参数。

ArgParser支持哪些类型的命令行参数?

ArgParser支持option、with option、switch和args等类型的命令行参数设计。

ArgParser如何提供帮助文档?

ArgParser内置对--help和-h的识别,允许为所有显式设定的参数提供help文本,输出参数的文档。

ArgParser在Oliva项目中是如何使用的?

在Oliva项目中,ArgParser被用作命令行解释器,处理源目录和目标路径等参数,并提供相应的帮助信息。

➡️

继续阅读