补充:
如果在java项目中希望使用命令行来进行某些操作,可以仿照如下示例。
首先需要定义一系列的Options,如下我们定义了getOptions()方法
private static Options getOptions() {
Options opts = new Options();
opts.addOption(buildOption("b", "beanName", true, "bean in xml with configure", true));
opts.addOption("a", "all", false, "if all or not, increment if this param escape");
opts.addOption("n", "ignore", false, "get all when token file not exist or empty, " +
"throw exception if this param escape and token file not exist or empty");
opts.addOption("h", "help", false, "print help");
return opts;
} //如上其实调用了Options.addOption(Option option); 和 Options.addOption(String opt, String longOpt, boolean hasArg, String description)两个方法 如下是API中的方法注释:
/**
* Add an option that contains a short-name and a long-name.
* It may be specified as requiring an argument.
*
* @param opt Short single-character name of the option.
* @param longOpt Long multi-character name of the option.
* @param hasArg flag signally if an argument is required after this option
* @param description Self-documenting description
* @return the resulting Options instance
*/
public Options addOption(String opt, String longOpt, boolean hasArg, String description)
{
addOption(new Option(opt, longOpt, hasArg, description));
return this;
} 同时,在类中定义了buildOption方法 protected static Option buildOption(String opt, String longOpt, boolean hasArg, String description, boolean isRequired) {
Option option = new Option(opt,longOpt,hasArg,description);
option.setRequired(isRequired);
return option;
} 其实,也就是设置了option是required的。
在这之后,我调用了parseArgs(Options options, String[] args)方法来对输入的args命令解析,生成CommandLine实例 注意这里的parseArgs方法实际上是调用如下部分方法(绿底红字): private static final CommandLineParser parser = new PosixParser();
public static CommandLine parseArgs(Options options, String []args) throws ParseException{
return parser.parse(options, args);
}
//这里才是真正的解析命令并执行操作的代码
public static void main(String[] args) {
Options opts = getOptions();
CommandLine commandline = null;
try {
commandline = parseArgs(opts, args);
} catch (ParseException e) {
printHelper(RoomImporterCommand.class.getSimpleName(), opts);
return;
}
//根据commandline中的参数值,给方法中的某些标志位设置不同的值。
String beanName = commandline.getOptionValue('b');
boolean allSign = false;
if(commandline.hasOption('a')){
allSign = true;
}
boolean ignore = false;
if(commandline.hasOption('n')){
ignore = true;
}
//根据上面生成的标志位的值,执行相关的操作,这里也就是实例化了一个classA,并调用了它的execute()方法。
ClassA classA = new ClassA(beanName, allSign, ignore);
System.exit(classA.execute());
}
}
|