java -jar 启动jar包时,需要在jar包后面指定 参数,如--pidfile=test.pid 等
java 的main方法参数 String [] args 中的args就是参数,但是自己解析起来比较困难。
commons-cli 已经帮助我们实现了常见的功能。
Maven 依赖如下
<!-- https://mvnrepository.com/artifact/commons-cli/commons-cli -->
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.6.0</version>
</dependency>
package test;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
public class OptionTest {
public static void main(String[] args) {
Map<String,String> cmdLineParm = getCmdLineParm(args);
if(cmdLineParm.containsKey("option")) {
System.err.println("option="+cmdLineParm.get("option"));
}
}
public static Map<String,String> getCmdLineParm(String[] args){
Map<String,String> parmMap = new HashMap<String, String>();
Options options = new Options();
//添加需要解析的参数 java -jar test.jar -o=optionparm true是-o后面带有参数 false后面没有 如 -h 代表help
options.addOption("o", "option", true, "options parm");
options.addOption("h", "help", false, "print help");
CommandLineParser parser = new DefaultParser();
HelpFormatter formatter = new HelpFormatter();
CommandLine cmd = null;
try {
cmd = parser.parse(options, args);
} catch (ParseException e) {
e.printStackTrace();
formatter.printHelp("Main", options);
System.exit(1);
}
if(cmd.hasOption("help")) {
formatter.printHelp("Main", options);
System.exit(1);
}
if(cmd.hasOption("option")) {
String optionValue = cmd.getOptionValue("option");
parmMap.put("option", optionValue);
}else {
System.err.println("NO Option value");
}
return parmMap;
}
}
运行jar包时后面跟上参数 -o "your parm" 就能解析出option 参数
formatter.printHelp("Main", options); 可以打印出来该jar包如何使用,后面显示需要什么参数及说明