Установить несколько системных свойств Java командной строки - PullRequest
58 голосов
/ 08 сентября 2011

Существует ли более простой способ указать несколько системных свойств в командной строке для Java-программы вместо использования нескольких операторов -D?

Попытка избежать этого:

 java -jar -DNAME="myName" -DVERSION="1.0" -DLOCATION="home" program.jar

Iмне показалось, что я видел пример того, как кто-то использовал одну -D и несколько строк в кавычках после этого, но я не могу найти пример снова.

Ответы [ 5 ]

49 голосов
/ 16 сентября 2011

Ответ НЕТ. Возможно, вы видели пример, где кто-то установил бы что-то вроде:

-DArguments=a=1,b=2,c=3,d=4,e=cow

Затем приложение будет анализировать значение Arguments строки свойств, чтобы получить отдельные значения. В вашем main вы можете получить значения ключей как (при условии, что формат ввода гарантирован):

String line = System.getProperty("Arguments");
if(line != null) {
  String str[] = line.split(",");
    for(int i=1;i<str.length;i++){
        String arr[] = str[i].split("=");
        System.out.println("Key = " + arr[0]);
        System.out.println("Value = " +  arr[1]);
    }
}

Кроме того, -D должен быть перед основным классом или файлом jar в командной строке java. Пример: java -DArguments=a=1,b=2,c=3,d=4,e=cow MainClass

15 голосов
/ 08 сентября 2011

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

14 голосов
/ 08 сентября 2011

В документации нет ничего, что упоминало бы о чем-либо подобном.

Вот цитата:

-Dсвойство = значение Установите значение системного свойства. Если значение является строкой, которая содержит пробелы, вы должны заключить строку в двойные кавычки:

java -Dfoo = "некоторая строка" SomeClass

4 голосов
/ 13 января 2018

Вы можете использовать переменную окружения JAVA_TOOL_OPTIONS для установки параметров.Это сработало для меня с Расбианом.См. Переменные среды и Системные свойства , где говорится следующее:

Во многих средах командная строка недоступна для запуска приложения с необходимыми параметрами командной строки.

Это часто происходит с приложениями, которые используют встроенные виртуальные машины (то есть они используют API вызова Java Native Interface (JNI) для запуска виртуальной машины), или когда запуск глубоко вложен в сценарии.В этих средах переменная среды JAVA_TOOL_OPTIONS может быть полезна для дополнения командной строки.

Когда установлена ​​эта переменная среды, функция JNI_CreateJavaVM (в API вызова JNI), функция JNI_CreateJavaVM добавляет значение переменной средык параметрам, указанным в его аргументе JavaVMInitArgs.

Однако использование этой переменной среды может быть отключено по соображениям безопасности.

В некоторых случаях этот параметр отключен по соображениям безопасности,Например, в операционной системе Oracle Solaris этот параметр отключен, если эффективный идентификатор пользователя или группы отличается от реального идентификатора.

См. Этот пример, показывающий разницу между указанием в командной строке и использованиемпеременная окружения JAVA_TOOL_OPTIONS.

screenshot showing use of JAVA_TOOL_OPTIONS environment variable

1 голос
/ 19 августа 2016

Если требуемые свойства необходимо установить в системе, тогда нет опции, кроме -D Но если вам нужны эти свойства при загрузке приложения, тогда загрузка свойств через файлы proerties является лучшим вариантом. Это не потребует изменения сборки для одного свойства.

...