这是我第一次使用apache commons-cli。
要求: 我想在commons-cli中使用CommandLine和Options将我的运行时参数传递给我的java类。
场景: 主要类 - com.test.mian.MyClass
我可以通过
从命令行运行我的课程java -cp $classPath com.test.mian.MyClass -one 1 -two 2 -three 3
如何通过使用CommandLine和commons-cli选项传递这些参数,从另一个类的方法中做同样的事情。
并且除了
之外还有其他方式System.setProperty("key","value");
请提出建议。
答案 0 :(得分:3)
这是我使用的非常精简版本。它基本上设置了一个初始化一次的单例,然后可以在程序中的任何地方使用。我选择将信息存储在HashMap和ArrayList中,因为它们以后更容易处理。
//****************************************************************************
//***** File Name: MianCLIOptions.java
//****************************************************************************
package com.test.mian;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.cli.AlreadySelectedException;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.GnuParser;
import org.apache.commons.cli.MissingArgumentException;
import org.apache.commons.cli.MissingOptionException;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.UnrecognizedOptionException;
import org.apache.commons.lang.WordUtils;
//****************************************************************************
//****************************************************************************
//****************************************************************************
//****************************************************************************
public class MianCLIOptions
{
//***** constants *****
//***** public data members *****
//***** private data members *****
private static MianCLIOptions singletonObj = null;
private HashMap<String,Object> options = new HashMap<String,Object>();
private ArrayList<String> arguments = new ArrayList<String>();
//****************************************************************************
public static MianCLIOptions getopts()
{
if (singletonObj == null) {
throw new IllegalStateException("[MianCLIOptions] Command line not yet initialized.");
}
return singletonObj;
}
//****************************************************************************
public static synchronized void initialize(Options optsdef, String[] args)
throws MianCLIOptionsException, UnrecognizedOptionException, MissingArgumentException,
MissingOptionException, AlreadySelectedException, ParseException
{
if (singletonObj == null) {
singletonObj = new MianCLIOptions(optsdef, args);
}
else {
throw new IllegalStateException("[MianCLIOptions] Command line already initialized.");
}
}
//****************************************************************************
//----- prevent cloning -----
public Object clone() throws CloneNotSupportedException
{
throw new CloneNotSupportedException();
}
//****************************************************************************
public boolean isset(String opt)
{
return options.containsKey(opt);
}
//****************************************************************************
public Object getopt(String opt)
{
Object rc = null;
if (options.containsKey(opt)) {
rc = options.get(opt);
}
return rc;
}
//****************************************************************************
//***** finally parse the command line
//****************************************************************************
private MianCLIOptions(Options optsdef, String[] args)
throws UnrecognizedOptionException, MissingArgumentException,
MissingOptionException, AlreadySelectedException, ParseException
{
//***** (blindly) parse the command line *****
CommandLineParser parser = new GnuParser();
CommandLine cmdline = parser.parse(optsdef, args);
//***** store options and arguments *****
//----- options -----
for (Option opt : cmdline.getOptions()) {
String key = opt.getOpt();
if (opt.hasArgs()) {
options.put(key, opt.getValuesList());
}
else {
options.put(key, opt.getValue());
}
}
//----- arguments -----
for (String str : cmdline.getArgs()) {
//----- account for ant/build.xml/generic -----
if (str.length() > 0) {
arguments.add(str);
}
}
}
}
//****************************************************************************
//***** EOF ***** EOF ***** EOF ***** EOF ***** EOF ***** EOF **********
在你的主体中,你可以这样称呼它:
//***** build up options *****
Options options = new Options();
// ... .... ...
//***** process command line *****
try {
MianCLIOptions.initialize(options, args);
}
catch (UnrecognizedOptionException ex) {
// do something
}
最后,在其他一些课程中你可以这样称呼它:
MianCLIOptions opts = MianCLIOptions.getopts();
if (opts.isset("someopt")) {
// do something exciting
}
希望有所帮助!