装修广告做哪个网站最好看,wordpress如何上传图片,制作网站的步骤是什么,网络公司哪个效果好在上一篇文章中 #xff0c;我研究了如何使用Apache Commons CLI在Java应用程序中解析命令行参数。 在本文中#xff0c;我将使用另一个库args4j进行相同的操作。 args4j采用了一种不同于Commons CLI的方式来指定Java应用程序应期望的命令行参数。 尽管Commons CLI期望代表选… 在上一篇文章中 我研究了如何使用Apache Commons CLI在Java应用程序中解析命令行参数。 在本文中我将使用另一个库args4j进行相同的操作。 args4j采用了一种不同于Commons CLI的方式来指定Java应用程序应期望的命令行参数。 尽管Commons CLI期望代表选项的对象将被单独且显式实例化但args4j使用自定义注释来促进命令行参数处理的这一“定义”阶段。 命令行选项应该是类上的实例级字段并带有 org.kohsuke.args4j.Option批注。 每个命令行参数的特征都包含在此Option注释的属性中。 本文中演示的简单应用程序与我上一篇文章中使用的应用程序相似并着重于用于指定详细程度的可选且无值的-v选项以及所需的-f选项该选项期望代表文件路径和名称的值。 下一个代码清单演示了如何使用args4j的Option注释将这些命令行参数设置为类数据成员上的注释。 args4j通过Option注释定义命令行参数 Option(name-v, aliases--verbose, usagePrint verbose status.)
private boolean verbose;Option(name-f, aliases--file, usageFully qualified path and name of file., requiredtrue)
private String fileName; 如上面的代码清单所示很容易指定选项的名称用法以及是否需要默认是可选的。 上面的private修饰符的存在使它们很明显是在类级别定义的属性。 因为没有static修饰符所以我们看到这些是已注释的实例变量。 要解析命令行选项只需实例化一个CmdLineParser并将命令行参数传递给其parseArgumentsString ...方法 解析args4j中的命令行参数 final CmdLineParser parser new CmdLineParser(this);
try
{parser.parseArgument(arguments);
}
catch (CmdLineException clEx)
{out.println(ERROR: Unable to parse command-line options: clEx);
} 在刚刚显示的Java代码的第一行中 this是对类实例的引用在该类实例中定义了上面显示的成员变量并使用Option注释Option注释。 在这种情况下我使用this是因为定义这些选项的同一类是调用此解析方法的类。 为了在同一个类中执行此操作我需要在类中定义一个名为doMain的实例非static 方法并由该类的main函数调用该方法这在本文结尾处的完整代码清单中显示。 从类的main(final String[])函数接收的命令行参数是传递给parseArguments(String[])方法的parseArguments(String[])数组。 接下来的两个屏幕快照演示了基于args4j的上述代码在解析命令行参数中的应用。 第一张图片显示了两个选项的短选项和长选项的组合。 第二个图像显示了自动报告未提供必需的命令行参数的情况。 命令行解析库的一个重要功能是能够显示用法或帮助信息。 下一个代码清单演示了使用args4j的CmdLineParser.printUsageOutputStream方法执行此操作的示例。 使用args4j打印使用情况信息 final CmdLineParser parser new CmdLineParser(this);
if (arguments.length 1)
{parser.printUsage(out);System.exit(-1);
} 下一个屏幕快照描述了args4j默认打印出的使用情况信息。 这篇文章演示了如何使用arg4j实现与Java应用程序中的命令行解析有关的一些最常见功能包括选项“定义”命令行参数“解析”对所解析的命令行参数的“询问”以及帮助/ us与命令行参数有关的详细信息。 现在显示了上面在代码清单中部分表示的类的完整代码清单。 args4j演示Main.java的完整代码清单 package examples.dustin.commandline.args4j;import static java.lang.System.out;import org.kohsuke.args4j.CmdLineException;
import org.kohsuke.args4j.CmdLineParser;
import org.kohsuke.args4j.Option;import java.io.IOException;/*** Demonstrate args4j.*/
public class Main
{Option(name-v, aliases--verbose, usagePrint verbose status.)private boolean verbose;Option(name-f, aliases--file, usageFully qualified path and name of file., requiredtrue)private String fileName;private void doMain(final String[] arguments) throws IOException{final CmdLineParser parser new CmdLineParser(this);if (arguments.length 1){parser.printUsage(out);System.exit(-1);}try{parser.parseArgument(arguments);}catch (CmdLineException clEx){out.println(ERROR: Unable to parse command-line options: clEx);}out.println(The file fileName was provided and verbosity is set to verbose .);}/*** Executable function demonstrating Args4j command-line processing.** param arguments Command-line arguments to be processed with Args4j.*/public static void main(final String[] arguments){final Main instance new Main();try{instance.doMain(arguments);}catch (IOException ioEx){out.println(ERROR: I/O Exception encountered: ioEx);}}
} 这是在选择框架或库来帮助Java进行命令行解析时要考虑的args4j的一些其他特征。 args4j是开放源代码并已获得MIT许可证 。 当前版本的args4j 2.33 需要 J2SE 5 。 args4j不需要单独下载或引用任何第三方库。 args4j 2.33主JAR args4j-2.33.jar 的大小约为152 KB。 Maven存储库显示了376个对args4j的依赖关系 包括OpenJDK的JMH Core和Jenkins 考虑到川口晃介的参与这不足为奇。 args4j已经存在了一段时间 其2.0.3版本于2006年1月发布 至少从2003年开始就以某种形式出现。 args4j允许通过Option注释上的“ hidden ”将命令行参数从使用情况输出中排除。 args4j允许指定和强制执行命令行参数之间的关系。 这包括指定何时不能同时提供两个参数的能力“ 禁止 ”以及仅当还提供了另一个参数时“ depends ”才有意义的情况。 args4j支持在有限的一组值适用于该选项的情况下使用枚举类型的类属性。 Option文档在“枚举开关”部分下说明了如何执行此操作。 args4j通过其OptionHandler类提供了命令行参数解析的可扩展性和可定制性。 args4j库易于使用并允许高度可读的代码。 决定是否使用args4j时最大的考虑因素可能是确定使用批注指定命令行参数定义的舒适程度。 其他参考 args4j args4j下载 args4j源代码 GitHub args4j API文档 args4j样本主 翻译自: https://www.javacodegeeks.com/2017/06/java-command-line-interfaces-part-2-args4j.html