Правильное использование параметров командной строки Java -D

При передаче параметра -D в Java, каков правильный способ написания командной строки, а затем доступа к ней из кода?

Например, я попытался написать что-то вроде этого...

if (System.getProperty("test").equalsIgnoreCase("true"))
{
   //Do something
}

И затем называя это так...

java -jar myApplication.jar -Dtest="true"

Но я получаю исключение NullPointerException. Что я делаю неправильно?

Ответ 1

Я подозреваю, что проблема в том, что вы положили "-D" после -jar. Попробуйте следующее:

java -Dtest="true" -jar myApplication.jar

В командной строке help:

java [-options] -jar jarfile [args...]

Другими словами, способ, которым вы его получили в данный момент, будет рассматривать -Dtest="true" как один из аргументов для перехода к main вместо аргумента JVM.

(Вероятно, вы также должны отказаться от кавычек, но он может работать в любом случае - это, вероятно, зависит от вашей оболочки.)

Ответ 2

Это должно быть:

java -Dtest="true" -jar myApplication.jar

Затем возвращается следующее значение:

System.getProperty("test");

Значение может быть null, однако, поэтому предостерегайте исключение, используя Boolean:

boolean b = Boolean.parseBoolean( System.getProperty( "test" ) );

Обратите внимание, что метод getBoolean делегирует значение системного свойства, упрощая код:

if( Boolean.getBoolean( "test" ) ) {
   // ...
}

Ответ 3

Вы передаете параметры своей программе вместо Java. Используйте

java -Dtest="true" -jar myApplication.jar 

вместо.

Рассмотрим использование

"true".equalsIgnoreCase(System.getProperty("test"))

чтобы избежать NPE. Но не используйте "условия Йода" всегда, не задумываясь, иногда бросая NPE - это правильное поведение, а иногда что-то вроде

System.getProperty("test") == null || System.getProperty("test").equalsIgnoreCase("true")

является правильным (предоставление значения по умолчанию true). Более короткая возможность

!"false".equalsIgnoreCase(System.getProperty("test"))

но не используя двойное отрицание, не становится менее трудным понять.