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

compareToIgnoreCaselugar deequalsIgnoreCaseidentificadores 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 enmainlugar 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
nullembargo, el valor podría ser , así que evite una excepción utilizando unBoolean:Tenga en cuenta que el
getBooleanmé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=123Está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 .