Правильное использование параметров командной строки Java-D
при передаче параметра a-D в Java, каков правильный способ написания командной строки, а затем доступ к нему из кода?
например, я пробовал писать что-то вроде этого...
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
и затем называя его так...
java -jar myApplication.jar -Dtest="true"
но я получаю исключение NullPointerException. Что я делаю не так?
3 ответов:
Я подозреваю, что проблема в том, что вы поставили "-D" после the
-jar. Попробуйте это:java -Dtest="true" -jar myApplication.jarиз командной строки справка:
java [-options] -jar jarfile [args...]другими словами, то, как вы получили его в данный момент будет относиться
-Dtest="true"как один из аргументов, чтобы перейти кmain, а не как аргумент для JVM.(вы должны, вероятно,и отбросьте цитаты, но это может хорошо работать в любом случае - это, вероятно, зависит от вашей оболочки.)
что надо:
java -Dtest="true" -jar myApplication.jarтогда значение будет возвращено следующим образом:
System.getProperty("test");значение может быть
null, хотя, так что остерегайтесь исключения с помощьюBoolean:boolean b = Boolean.parseBoolean( System.getProperty( "test" ) );отметим, что
getBooleanметод делегирует системное значение свойства, упрощая код до:if( Boolean.getBoolean( "test" ) ) { // ... }
вы даете параметры для вашей программы вместо 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"))но не используя двойное отрицание не делает это менее трудно понять.
Comments