如何在执行 jar 时给出参数值?

How can I give parameter values while executing a jar?

我的主 class 中有两个输入参数,例如:

  public static void main(String[] args) throws IOException, JSONException, ParseException {

    DataFromES df = new DataFromES();
    String year = "";
    String[] month = {""};

    for (String m : month) {
        df.receiveData(year,m);

    }

    System.out.println("Excel Generated");
}

我已经为我的项目生成了 jar。但是我很不确定如何在通过 CMD 执行它时将值传递给 jar。我已经知道如何将参数传递给 jar,但不清楚如何将值传递给上述两个 Strings.

在你的 main() 方法中,你需要声明你的 2 个变量:

public static void main(String[] args) {
    String year = args[0];
    String month = args[1];

    .... your treatment ...
}

因此,将年份作为第一个参数传递,将月份作为第二个参数传递;)

您可以使用java命令将参数传递给args,像这样:

java -cp jar-name.jar complete-class-name "2016" "08"

你的代码是这样的:

String year = args[0];
String month = args[1];

为了避免重新发明轮子和错误,您应该考虑使用像 Apache Commons CLI 这样的库,它会为您正确解析您的命令。

public static void main(final String[] args) {
    Options options = new Options();
    options.addOption(
        Option.builder("y")
            .required(true)
            .hasArg(true)
            .desc("The year")
            .longOpt("year")
            .build()
    );
    options.addOption(
        Option.builder("m")
            .required(true)
            .desc("The months")
            .numberOfArgs(Option.UNLIMITED_VALUES)
            .longOpt("month")
            .build()
    );
    CommandLineParser parser = new DefaultParser();
    CommandLine cmd;
    try {
        cmd = parser.parse(options, args);
    } catch (ParseException e) {
        System.err.println( "Could not parse the command due to: " + e.getMessage());
        HelpFormatter formatter = new HelpFormatter();
        formatter.printHelp( "java", options );
        return;
    }
    String year = cmd.getOptionValue("y");
    String[] months = cmd.getOptionValues("m");
    // Rest of your code here
}

然后您可以使用 -y--year 来提供您的论点,如果是年份,则可以使用 -m--month 来提供您的论点。如果出现解析错误,也会打印用法。


如果您想手动执行此操作(假设您先输入年份,然后输入月份),那么您的代码将是:

public static void main(final String[] args) {
    if (args.length < 2)
        throw new IllegalStateException("Not enough arguments");
    String year = args[0];
    String[] months = new String[args.length - 1];
    System.arraycopy(args, 1, months, 0, months.length);
    ...
}

但我们应该添加更多测试以确保参数总数正确且参数有效,这就是我建议改用库的原因。