Правильное использование параметров командной строки 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"))
но не используя двойное отрицание, не становится менее трудным понять.