При передаче параметра -D в Java, как правильно написать командную строку и затем получить к ней доступ из кода?
Например, я пытался написать что-то вроде этого ...
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
И затем называя это так ...
java -jar myApplication.jar -Dtest="true"
Но я получаю исключение NullPointerException. Что я делаю не так?
java
command-line
parameters
Райан Бергер
источник
источник
compareToIgnoreCase
вместоequalsIgnoreCase
локально-независимых идентификаторов; в противном случае вы можете столкнуться с турецкой проблемой четверки, среди других.Ответы:
Я подозреваю , что проблема в том , что вы поставить «-D» после
-jar
. Попробуй это:Из справки командной строки:
Другими словами, то, как вы сейчас это получите, будет рассматриваться
-Dtest="true"
как один из аргументов для передачи,main
а не как аргумент JVM.(Возможно, вам также следует отказаться от кавычек, но в любом случае это может сработать - это, вероятно, зависит от вашей оболочки.)
источник
Которые должны быть:
Затем следующее вернет значение:
Однако значение может быть
null
таким, поэтому защитите себя от исключения, используяBoolean
:Обратите внимание, что
getBoolean
метод делегирует значение системного свойства, упрощая код до:источник
Integer.getInteger("test"); Long.getLong("test")
при условии, что у вас есть-Dtest=123
Вы даете параметры своей программе вместо Java. использование
вместо.
Рассмотреть возможность использования
чтобы избежать NPE. Но не используйте « условия Йоды » всегда, не задумываясь, иногда бросать NPE - это правильное поведение, а иногда что-то вроде
верно (если задано значение по умолчанию true). Более короткая возможность
но не использование двойного отрицания не делает его менее трудным для неправильного понимания.
источник
System.getProperty("test", "true").equalsIgnoreCase("true")
был бы лучший способ написать последнее условие.Boolean.getBoolean("test");
это еще один вариант. См .