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



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



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



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


и затем называя его так...



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


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

558   3  

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

    Ничего не найдено.