2016-10-20 6 views
0

Класс Runtime Java позволяет присваивать значения системных свойств named в качестве аргументов командной строки при запуске jar. Как показано ниже:Как передать значения системных свойств в processBuilder?

Runtime.getRuntime().exec("java -jar -DiName=ABC C:\\Test.jar"); 

Я пытаюсь перейти от выполнения для ProcessBuilder для достижения той же функциональности. Нужен совет, как правильно это сделать.

ProcessBuilder pb = new ProcessBuilder("java", "-jar", "C:\\Test.jar").start(); 

В приведенном выше коде, как я могу передать «iName»?

Причина, по которой я перехожу из Runtime в ProcessBuilder, - это программа java, запускающая этот код времени выполнения, не работает в конкретной производственной среде, использующей 1.8.0_40 JDK.

+0

Что такое «iName»? –

+2

obviusly должно быть '(" java "," - DiName = ABC "," -jar "," C: \\ Test.jar ")' –

ответ

1

Просто взгляните на Javadoc.

Там ясно сказано, что ProcessBuilder конструктор может иметь форму public ProcessBuilder(String... command) (, например, см Timothy раскладушка комментарий) или, что то же самое, только один параметр типа List<String>.

Таким образом, противоположно Runtime, в котором токенизирует одну единственную строку, здесь ProcessBuilder, требуется уже обозначенный список параметров.

Возможно, чтобы избежать какой-либо будущей путаницы, было бы лучше хранить параметры в переменной, для более легкой модификации позже. Например:

List<String> params = java.util.Arrays.asList("java", "-jar", "-DiName=ABC", "C:\\Test.jar"); 
ProcessBuilder pb = new ProcessBuilder(params).start(); 

Надеюсь, что это поможет в долгосрочной перспективе!

0
new ProcessBuilder("java", "-jar", "-DiName=ABC", "C:\\Test.jar"); 

ProcessBuilder принимает массив (переменной длины) параметров, которые будут сцепленных и выполняются.