Al pasar un parámetro -D en Java, ¿cuál es la forma correcta de escribir la línea de comandos y luego acceder a ella desde el código?
Por ejemplo, he intentado escribir algo como esto ...
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
Y luego llamándolo así ...
java -jar myApplication.jar -Dtest="true"
Pero recibo una NullPointerException. ¿Qué estoy haciendo mal?
java
command-line
parameters
Ryan Berger
fuente
fuente
compareToIgnoreCase
lugar deequalsIgnoreCase
identificadores agnósticos locales; de lo contrario, puede encontrarse con el problema turco de cuatro is, entre otros.Respuestas:
Sospecho que el problema es que usted ha puesto la "D" después de la
-jar
. Prueba esto:Desde la línea de comando ayuda:
En otras palabras, la forma en que lo tiene en este momento se tratará
-Dtest="true"
como uno de los argumentos para pasar enmain
lugar de como un argumento JVM.(Probablemente también debería descartar las comillas, pero puede funcionar de todos modos, probablemente depende de su shell).
fuente
Eso debería ser:
Entonces lo siguiente devolverá el valor:
Sin
null
embargo, el valor podría ser , así que evite una excepción utilizando unBoolean
:Tenga en cuenta que el
getBoolean
método delega el valor de propiedad del sistema, simplificando el código para:fuente
Integer.getInteger("test"); Long.getLong("test")
suponiendo que usted tiene-Dtest=123
Estás dando parámetros a tu programa en lugar de a Java. Utilizar
en lugar.
Considere usar
para evitar la NPE. Pero no use las " condiciones de Yoda " siempre sin pensar, a veces lanzar el NPE es el comportamiento correcto y otras veces algo así como
es correcto (proporciona el valor predeterminado verdadero). Una posibilidad más corta es
pero no usar la doble negación no hace que sea menos difícil de entender mal.
fuente
System.getProperty("test", "true").equalsIgnoreCase("true")
sería la mejor manera de escribir la última condición.Boolean.getBoolean("test");
Es otra opción. Ver .