Proper usage of Java -D command-line parameters

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?

3

3 Answers

I suspect the problem is that you've put the "-D" after the -jar. Try this:

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

From the command line help:

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

In other words, the way you've got it at the moment will treat -Dtest="true" as one of the arguments to pass to main 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.)

4

That should be:

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

Then the following will return the value:

System.getProperty("test"); 

The value could be null, though, so guard against an exception using a Boolean:

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

Note that the getBoolean method delegates the system property value, simplifying the code to:

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

You're giving parameters to your program instead to Java. Use

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

instead.

Consider using

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

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

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

is right (providing default true). A shorter possibility is

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

but not using double negation doesn't make it less hard to misunderstand.

9

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like