如何在执行 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);
...
}
但我们应该添加更多测试以确保参数总数正确且参数有效,这就是我建议改用库的原因。
我的主 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);
...
}
但我们应该添加更多测试以确保参数总数正确且参数有效,这就是我建议改用库的原因。