在使用 Apache Commons CLI、args4j、jbock 和 查看了 Java 中的命令行处理 之后命令行 在之前的帖子中,我将注意力转移到使用 JewelCli 来完成 Java 中命令行参数的类似处理。
几个 Java 命令行处理库使用注释来定义命令行选项。到目前为止,本系列文章中涵盖的四个库中的三个使用注释,JewelCli 也是如此。 JewelCli 在我迄今为止介绍的库中是独一无二的,因为它的注释应用于 Java 接口而不是 Java 类或类的构造。下一个代码清单演示了如何在 Java 接口上使用注释来使用 JewelCli 实现命令行解析的“定义”阶段。
JewelCli“定义”用注解接口实现
package examples.dustin.commandline.jewelcli; import com.lexicalscope.jewel.cli.Option; /** * Interface defining JewelCli-friendly command-line parameters. */ public interface MainCommandLine { @Option(shortName="f", description="Name and path of file to be used.") String getFile(); @Option(shortName="v", description="Indicate whether status should be reported verbosely.") boolean isVerbose(); @Option(helpRequest=true, description="Usage details on command-line arguments.") boolean getHelp(); }
上面显示的简单界面包含很多与命令行处理相关的内容。这些选项的单连字符短名称通过 shortName
注释类型元素显式指定,并通过“get”方法的名称隐式指定(尽管 longName
注释类型元素是可用于显式指定开关的长名称 [双连字符] 版本)。命令行选项还通过 Option
注释提供了各自的描述。 helpRequest=true
的使用描述了应该使用什么命令行开关来显示使用/帮助信息。在这种情况下,因为注释方法被命名为getHelp()
,所以--help
开关将显示使用信息。如果我将方法命名为 getDustin()
并用 @Option(helpRequest=true)
对其进行注释,则开关将是 --dustin
以显示用法。
除了与方法名称匹配的开关的长名称之外,JewelCli 在某些情况下还利用了约定优于配置的优势。通过如上所示注释的命令行选项的相应接口方法定义,冗长开关(返回 boolean
)是可选的。文件名开关是必需的,因为它对应的 getFile()
方法返回一个 String
。如果我想让文件名可选,我可以为 defaultValue
方法上的 @Option
注释提供一个 getFile()
,例如 @Option(defaultValue="")
。
通过使用 JewelCli MainCommandLine
注释注释的接口(在本例中名为 @Option
),我们可以使用 JewelCli 进入“解析”阶段。这在 Main
的下一个代码清单中与“询问”阶段一起进行了演示。
使用 JewelCli 的“解析”和“询问”阶段
package examples.dustin.commandline.jewelcli; import static java.lang.System.out; import com.lexicalscope.jewel.cli.CliFactory; /** * Demonstrates use of JewelCli for parsing command-line * parameters in Java. */ public class Main { public static void main(final String[] arguments) { final MainCommandLine main = CliFactory.parseArguments(MainCommandLine.class, arguments); out.println("You specified file '" + main.getFile() + "' with verbosity setting of '" + main.isVerbose() + "'."); } }
刚刚显示的 Main
类有一行“解析”[调用 CliFactory.parseArguments(Class<T>, String...)
] 和一行“询问”[访问 JewelCli 上定义的方法的行- 前面显示的带注释的界面]。
以下三个屏幕快照演示了基于 JewelCli 的代码示例的实际运行情况。第一张图片演示了如何使用 --help
查看用法(注意堆栈跟踪包含在输出中)。第二张图片显示了长 (-
) 和短 (--
) 选项开关的不同组合。第三张图片显示了未提供必需的命令行参数(在本例中为 --file
或 -f
)时显示的输出消息和相关堆栈跟踪。
这篇博文中用于演示 JewelCli 应用的两个类的代码清单在 GitHub 上可用。
以下是在选择库以帮助在 Java 中进行命令行解析时要考虑的 JewelCli 的一些其他特性。
jewelcli-0.8.9.jar
/ 2014 年 2 月)大小约为 542 KB。@Option
将在继承接口中得到支持。JewelCli 易于使用,并且由于其约定优于配置方法,只需很少的代码即可定义、解析和查询命令行参数。我发现注释用于定义可解析命令行选项的接口的推荐方法在美学上也令人愉悦。
其他资源
标签2: Java教程地址:https://www.cundage.com/article/jcg-java-command-line-interfaces-part-5-jewelcli.html