让用户通过命令行选项调整您的Java应用程序的运行方式。通常当你在终端输入命令时,无论是启动一个GUI应用程序还是只是一个终端应用程序,你都可以使用命令行选项或开关或标志(以下简称选项)来修改应用程序的运行方式。这是POSIX规范设定的标准,因此能够检测和解析选项是Java程序员的一项有用技能。Java中有多种解析选项的方法,我最喜欢的是ApacheCommonsCLI库,简称commons-cli。安装commons-cli如果使用Maven等项目管理系统和集成开发环境(简称IDE),可以在项目属性(如pom.xml配置文件或Eclipse、NetBeans的配置选项卡)中安装Apache公共CLI库。如果您手动管理库,则可以从Apache网站下载最新版本的库。本地下载有几个捆绑的JAR文件,你只需要其中一个,commons-cli-X.Y.jar(其中X和Y指的是最新版本号)。手动或使用IDE将此JAR文件添加到您的项目中,然后它就可以在您的代码中使用了。将库导入Java代码在使用commons-cli库之前,必须先导入它。对于这个选项解析的简单示例,您可以简单地在Main.java文件中编写以下标准代码:/code}}至此,Java中解析options的准备工作已经完成。在Java中定义布尔选项要实现解析选项,您首先要定义您的应用程序可以接受的有效选项。使用Option(注意单数)类创建选项对象,使用Option(注意复数)类跟踪项目中创建的所有选项。首先为选项创建一个组,按照约定命名选项://codeOptionsoptions=newOptions();:设置option参数是否需要,指定为false时,该选项没有参数,即布尔选项)和帮助信息定义选项,然后设置是否需要选项(LCTT译注:创建代码下面的alpha对象不是手动设置的),最后将选项添加到包含所有选项的选项组对象中。在下面的代码行中,我刚刚创建了一个名为alpha的选项://defineoptionsOptionalpha=newOption("a","alpha",false,"Activatefeaturealpha");options.addOption(alpha);在Java中定义带有参数的Options有时用户需要通过选项提供除true或false之外的信息,例如给出配置文件、输入文件,或者设置日期和颜色等项值。在这种情况下,构建器方法可用于根据简写选项名称创建属性(例如,-c是一个短选项,--config是一个长选项)。完成定义后,将定义的选项添加到选项组中:Optionconfig=Option.builder("c").longOpt("config").argName("config").hasArg().required(true)。desc("setconfigfile").build();options.addOption(config);builder函数可以用来设置shortoption,longoption,是否需要(这段代码中required项设置为true,表示用户在启动程序时必须提供这个选项,否则应用程序会未运行)、帮助信息等。在使用Java解析选项定义并添加所有可能的选项后,需要遍历用户提供的参数,并检查是否有参数与预设的有效短选项列表中的内容相匹配。为此,创建命令行CommandLine本身的实例,其中包含用户提供的所有参数(有效和无效选项)。为了处理这些参数,还要创建一个CommandLineParser对象,我在代码中将其命名为parser。最后,您还可以创建一个HelpFormatter对象(我将其命名为helper),该对象可以在参数中缺少某些必需项或用户使用--help或-h选项时自动向用户提供一些有用的信息。//defineparserCommandLinecmd;CommandLineParserparser=newBasicParser();HelpFormatterhelper=newHelpFormatter();最后,添加一些条件判断来分析用户提供的选项,我们假设这些选项已经作为命令行输入获取并存储在cmd变量中。此示例应用程序有两种不同类型的选项,但对于这两种类型,您都可以使用带有短选项名称的.hasOption方法来检测选项是否存在。在检测到选项的存在后,可以进一步处理数据。try{cmd=parser.parse(options,args);if(cmd.hasOption("a")){System.out.println("Alphaactivated");}if(cmd.hasOption("c")){Stringopt_config=cmd.getOptionValue("config");System.out.println("Configsetto"+opt_config);}}catch(ParseExceptione){System.out.println(e.getMessage());helper.printHelp("用法:",options);System.exit(0);}解析过程可能会产生错误,因为某些必需的项目(例如本示例中的-c或--config选项)可能会丢失。这时,程序会打印一条帮助信息,并立即结束运行。要解决此错误(在Java术语中称为异常),请在main方法的开头添加声明可能的异常的语句:publicstaticvoidmain(String[]args)throwsParseException{示例程序现已完成。测试代码您可以通过调整传递给代码的默认参数在IDE中测试应用程序,或者创建一个JAR文件并在终端中运行测试。此过程可能因IDE而异。有关详细信息,请参阅相应的IDE文档,以及我关于如何创建JAR文件的文章,或DanielOh关于如何使用Maven执行相同操作的文章。首先,省略检测解析器异常处理所需的-c或--config选项:$java-jardist/myapp.jarMissingrequiredoption:cusage:Usage:-a,--alphaActivatefeaturealpha-c,--config
