Java 如何在执行jar时给出参数值?
我的主类中有两个输入参数,例如:Java 如何在执行jar时给出参数值?,java,jar,executable-jar,Java,Jar,Executable Jar,我的主类中有两个输入参数,例如: public static void main(String[] args) throws IOException, JSONException, ParseException { DataFromES df = new DataFromES(); String year = ""; String[] month = {""}; for (String m : month) { df.receiveData
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,但不清楚如何将值传递给上述两个字符串在main()方法中,您需要声明两个变量:
public static void main(String[] args) {
String year = args[0];
String month = args[1];
.... your treatment ...
}
因此,将年作为第一个参数,将月作为第二个参数;) 在main()方法中,需要声明两个变量:
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];
您的代码如下所示:
java -cp jar-name.jar complete-class-name "2016" "08"
String year = args[0];
String month = args[1];
您可以使用java
命令将参数传递给args,如下所示:
java -cp jar-name.jar complete-class-name "2016" "08"
String year = args[0];
String month = args[1];
您的代码如下所示:
java -cp jar-name.jar complete-class-name "2016" "08"
String year = args[0];
String month = args[1];
< >为了避免重新创建轮子和bug,你应该考虑使用一个类似的库来解析你的命令。< /P>
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);
...
}
publicstaticvoidmain(最终字符串[]args){
如果(参数长度<2)
抛出新的非法状态异常(“参数不足”);
字符串年份=args[0];
字符串[]个月=新字符串[args.length-1];
数组复制(args,1,月,0,月,长度);
...
}
<>但是我们应该添加更多的测试来保证参数的总数是正确的,并且参数是有效的,这就是为什么我建议使用一个库来代替.< /p> ,以避免重新创建轮子和bug,你应该考虑使用一个类似的库来为你正确地解析你的命令。
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);
...
}
publicstaticvoidmain(最终字符串[]args){
如果(参数长度<2)
抛出新的非法状态异常(“参数不足”);
字符串年份=args[0];
字符串[]个月=新字符串[args.length-1];
数组复制(args,1,月,0,月,长度);
...
}
但是我们应该添加更多的测试,以确保参数总量正确且参数有效,这就是我建议使用库的原因。year=args[0]代码>?命令行中的参数存储在主类year=args[0]中的args数组中代码>?命令行中的参数存储在主类中的args数组中,第二个参数为:String[]month=args[1]。拆分(“,”)并正常工作。:)将第二个参数设置为:String[]month=args[1]。拆分(“,”)并成功:解释很贴切。解释很贴切。