When passing a -D parameter in Java, what is the proper way of writing the command-line and then accessing it from code?
For example, I have tried writing something like this...
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
And then calling it like this...
java -jar myApplication.jar -Dtest="true"
But I receive a NullPointerException. What am I doing wrong?
I suspect the problem is that you've put the "-D" after the
-jar
. Try this:From the command line help:
In other words, the way you've got it at the moment will treat
-Dtest="true"
as one of the arguments to pass tomain
instead of as a JVM argument.(You should probably also drop the quotes, but it may well work anyway - it probably depends on your shell.)
You're giving parameters to your program instead to Java. Use
instead.
Consider using
to avoid the NPE. But do not use "Yoda conditions" always without thinking, sometimes throwing the NPE is the right behavior and sometimes something like
is right (providing default true). A shorter possibility is
but not using double negation doesn't make it less hard to misunderstand.
That should be:
Then the following will return the value:
The value could be
null
, though, so guard against an exception using aBoolean
:Note that the
getBoolean
method delegates the system property value, simplifying the code to: