Uso adecuado de los parámetros de línea de comandos Java -D

Al pasar un parámetro -D en Java, ¿cuál es la forma correcta de escribir la línea de comando y luego acceder a ella desde el código?

Por ejemplo, intenté escribir algo como esto …

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

Y luego llamarlo así …

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

Pero recibo una NullPointerException. ¿Qué estoy haciendo mal?

Sospecho que el problema es que has puesto la “-D” después del -jar . Prueba esto:

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

Desde la línea de comandos ayuda:

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

En otras palabras, la forma en que lo tiene en este momento tratará a -Dtest="true" como uno de los argumentos para pasar al argumento main lugar de hacerlo como argumento de JVM.

(Probablemente también deba soltar las comillas, pero bien podría funcionar de todos modos, probablemente dependa de su caparazón).

Eso debería ser:

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

Luego, lo siguiente devolverá el valor:

 System.getProperty("test"); 

Sin embargo, el valor podría ser null , así que evite una excepción usando un Boolean :

 boolean b = Boolean.parseBoolean( System.getProperty( "test" ) ); 

Tenga en cuenta que el método getBoolean delega el valor de la propiedad del sistema, simplificando el código para:

 if( Boolean.getBoolean( "test" ) ) { // ... } 

Estás dando parámetros a tu progtwig en lugar de a Java. Utilizar

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

en lugar.

Considere usar

 "true".equalsIgnoreCase(System.getProperty("test")) 

para evitar el NPE. Pero no use las ” condiciones de Yoda ” siempre sin pensar, a veces arrojar el NPE es el comportamiento correcto y, a veces, algo así como

 System.getProperty("test") == null || System.getProperty("test").equalsIgnoreCase("true") 

es correcto (proporcionando el valor predeterminado verdadero). Una posibilidad más corta es

 !"false".equalsIgnoreCase(System.getProperty("test")) 

pero no usar la doble negación no hace que sea menos difícil de entender mal.