[java] Java -D 명령 행 매개 변수의 올바른 사용법

Java에서 -D 매개 변수를 전달할 때 명령 행을 작성하고 코드에서 액세스하는 올바른 방법은 무엇입니까?

예를 들어, 나는 이런 식으로 글을 써 보았습니다 …

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

그리고 이렇게 부르면 …

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

그러나 NullPointerException이 발생합니다. 내가 뭘 잘못하고 있죠?



답변

문제는에 ‘-D’를 넣은-jar입니다. 이 시도:

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

명령 행 도움말에서 :

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

다시 말해, 현재 가지고있는 방식 은 JVM 인수 대신 -Dtest="true"전달할 인수 중 하나로 취급 됩니다 main.

(당신은 아마한다 또한 따옴표를 삭제하지만, 잘 어쨌든 작동 할 수 -. 아마 쉘에 따라 다름)


답변

다음과 같아야합니다.

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"))

그러나 이중 부정을 사용하지 않아도 오해하기가 어렵지 않습니다.


답변