Ao passar um parâmetro -D em Java, qual é a maneira correta de escrever a linha de comando e acessá-la a partir do código?
Por exemplo, eu tentei escrever algo assim ...
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
E então chamando assim ...
java -jar myApplication.jar -Dtest="true"
Mas eu recebo uma NullPointerException. O que estou fazendo de errado?
java
command-line
parameters
Ryan Berger
fonte
fonte
compareToIgnoreCase
vez deequalsIgnoreCase
para identificadores independentes de localidade; caso contrário, você pode se deparar com o problema turco de quatro is, entre outros.Respostas:
Eu suspeito que o problema é que você colocou o "-D" após o
-jar
. Tente o seguinte:Na ajuda da linha de comandos:
Em outras palavras, o modo como você o obteve no momento será tratado
-Dtest="true"
como um dos argumentos a serem passados, emain
não como um argumento da JVM.(Você provavelmente também deve soltar as aspas, mas pode funcionar de qualquer maneira - provavelmente depende do seu shell.)
fonte
Isso deve ser:
Em seguida, o seguinte retornará o valor:
O valor pode ser
null
, no entanto, para evitar uma exceção usando umBoolean
:Observe que o
getBoolean
método delega o valor da propriedade do sistema, simplificando o código para:fonte
Integer.getInteger("test"); Long.getLong("test")
supondo que você tem-Dtest=123
Você está dando parâmetros ao seu programa em vez de Java. Usar
em vez de.
Considere usar
para evitar o NPE. Mas não use " condições Yoda " sempre sem pensar, às vezes jogando o NPE é o comportamento certo e às vezes algo como
está correto (fornecendo o padrão true). Uma possibilidade mais curta é
mas não usar a dupla negação não torna menos difícil entender mal.
fonte
System.getProperty("test", "true").equalsIgnoreCase("true")
seria a melhor maneira de escrever a última condição.Boolean.getBoolean("test");
é outra opção. Veja .