java Option类/DefaultParser的使用,获取大量命令行参数(用户友好,支持长/短参数,支持默认参数,支持必填,支持帮助)

之前的文章中介绍了如何通过加载包外部配置文件来获取参数。
本文则是另一个场景,不加载文件,而是从命令行获取所有的参数,因为数量较多,所以将有关内容放在启动脚本中。

在项目下创建bin目录,在bin目录下创建start_test.sh。内容格式如下:

param1="parameter1"
param2="parameter2"

command="
--param1=${param1} \
--param2=${param2}
"

java_opts=" -Xmx20g -Xms20g -Xmn16g -Xss500k"

java -cp ../xxx.jar \
xxx.MainClassName \
$command

创建参数读入工具类如下,核心是parseOptions(),这个方法的作用主要包括:

  • 建立option和类成员的映射关系(也就是命令行参数被映射进程序)
  • 检查必填
  • 默认值设置
import org.apache.commons.cli.*;
import java.util.ArrayList;
import java.util.List;

public class xxxParameterUtils {
	CommandLine cmdLine =null;
	List<Options> requiredOpts = new ArrayLias<>();

	int param_eter_num = 0;
	public static fianl Option PARAM_ETER_NUM_OPTION = 
		new Option("p_num","parameter_num", ture, "参数");
	//短opt,长opt,是否有参数,description

	public static final Option HELP_OPTION = new Option("h","help",false,"Help");	

	public xxxParameterUtils() {
		//requiredOpts.add(); //添加必选参数
	}

	public Options getOptions() { //往options中加入所有option
		final Options options = new Options();
		options.addOption(PARAM_ETER_NUM_OPTION);
		return options;
	}

	public CommandLine parseOptions(String[] args) {
		final Options = getOptions();
		CommandLineParser parser = new DefaultParser();

		try {
			cmdLine = parser.parse(options, args);
		} catch (ParseException e) {
			//your handling
		}

		if(cmdLine.hasOption(HELP_OPTION.getOpt())) {
			printHelpAndExit(options, 0);
		}

		for(Option opt : requiredOpts) {
			if(!cmdLine.hasOption(opt.getOpt())) {
				printHelpAndExit(options, 0);
			}
		}
		
		this.param_meter_num = cmdLine.hasOption(PARAM_METER_NUM_OPTION.getOpt()) ? 
			Integer.valueOf(cmdLine.getOptionValue(PARAM_METER_NUM_OPTION.getOpt())) : 0;

		return cmdLine;
	}

	@Override
	public String toString() {
		return "xxxParamUtils{" + "param_meter_num=" + param_meter_num +'}'
	}

	public void printHelpAndExit(Options options, int exitCode) {
		HelpFormatter formatter = new HelpFormatter();
		formatter.printHelp("help","",options,"脚注");
		System.exit(exitCode);
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值