【问题标题】:how to use JCommander如何使用 JCommander
【发布时间】:2016-01-20 17:40:01
【问题描述】:

我下载了一个示例代码并想运行它,问题是它使用 JCommander 加载一些配置,我没有配置文件但它想加载一个,所以我想知道;我如何使用 JCommander,我阅读了文档,并根据该站点,它是一个用于解析命令行参数的框架,但我真的不明白这意味着什么,这个错误真的让我无法完成我的项目,这是请求的代码对于.conf 文件:

         BasicConfigurator.configure(); // TODO: config from options

        // Parse the command line options
        CliOptions options = new CliOptions();
        new JCommander(options, args);

        if (StringUtils.isBlank(options.configFile))
        {
            options.configFile = "/etc/car-counter/car-counter.conf";
        }

        // Read in the configuration
        Wini ini = new Wini();
        ini.getConfig().setMultiOption(true);
        ini.load(new File(options.configFile));

        new DefaultProcessor(ini).process();

这里是 CliOption 类

public class CliOptions
{
@Parameter(names = { "-c", "--config" }, description = "Sets the location of the configuration file.")
public String configFile;

}

【问题讨论】:

  • 所以您不需要解析命令行参数,但您仍然希望使用 JCommander? JComamnder 简化了我们编码和处理命令行参数的方式。
  • 不是我不这样做,这是我正在尝试运行的示例项目,它是一个 Opencv 示例项目,但不幸的是,在我修复此错误 java.io.FileNotFoundException: C:\etc\car-counter\car-counter.conf (The system cannot find the path specified)JCommander 生成之前,禁止运行它,我想获得有关如何使此代码工作的帮助,对 JCommander 不感兴趣,但没有它,似乎此示例代码将无法工作,我不会从我应该运行的示例代码中学习我想学习的内容跨度>

标签: java jcommander


【解决方案1】:

JCommander 背后的想法是提供一个易于配置的选项来提供命令行参数、它们的默认值等。

假设您的程序需要一个int 参数jdbc_batch_size,默认值为2500,并带有覆盖该值的选项。为此,请按照以下步骤操作,

  1. 你创建你自己的类,我们称之为CommandLine

导入 com.beust.jcommander.Parameter;

public class CommandLine {

 @Parameter(names = "-batchSize", description = "JDBC batch size",required=false)

 public int jdbc_batch_size=2500;

 }
  1. 现在,您在main() 方法中创建上述类CommandLine cli = new CommandLine(); 的对象

创建指挥官对象JCommander cmdr = new JCommander(cli, args);

  1. 现在您可以在main() 方法中简单地访问jdbc_batch_size,例如,

int jdbc_batch_size=cli.jdbc_batch_size;

  1. 如果你想override默认值,你通过命令行提供-batchSize 1000

简而言之,这就是JComamnder 的工作原理。

【讨论】:

  • 所以在我的情况下,我创建了一个名为 configFile 的文件,但问题是我无法在 main 中加载该文件,它总是给我错误java.io.FileNotFoundException: C:\etc\car-counter\car-counter.conf (The system cannot find the path specified)
  • 您尝试通过-c--config 选项通过命令行提供配置文件?那个文件存在吗? if (StringUtils.isBlank(options.configFile)) { options.configFile = "/etc/car-counter/car-counter.conf"; } 会查找文件,即使您没有提供或没有文件,所以它是强制性的。有什么问题?
  • 它的强制大部分代码似乎都依赖于该文件的文件,它不存在这是事实,我不知道它到底需要什么以及它可能包含什么
  • 尝试在该路径提供一个空文件
猜你喜欢
  • 2015-07-14
  • 2017-11-28
  • 2020-08-09
  • 2014-08-25
  • 2014-08-12
  • 2015-11-18
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多