2016-09-23 3 views
1

У меня два входных параметров в моем главном классе, такие как:Как я могу дать значения параметров при выполнении 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(year,m); 

    } 

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

Я уже сгенерировал jar для моего проекта. Но я не уверен, как передавать значения в jar, выполняя его через CMD. Я уже знаю, как передавать параметры в банку, но потом неясно, как передать значения двум вышеуказанным Strings.

+2

'year = args [0];'? – SomeJavaGuy

+0

Параметры из командной строки хранятся в массиве args в основном классе – Jens

ответ

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); 
    ... 
} 

Но мы должны добавить больше тестов, чтобы гарантировать, что общее количество аргументов верное и аргументы действительны, поэтому я предлагаю использовать библиотеку вместо этого.

+0

Объяснение было на месте. – Kulasangar

1

Внутри основной метод вы(), вы должны объявлять 2 переменные:

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

    .... your treatment ... 
} 

И так, пасс год в качестве первого аргумента и месяца, как второе;)

+0

сделали второй параметр следующим: String [] month = args [1] .split (","), и он сработал. :) – Kulasangar

1

Вы можете использовать java команда для передачи параметров в аргументах, например:

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

И код вроде этого:

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

 Смежные вопросы

  • Нет связанных вопросов^_^