Proper usage of Java -D command-line parameters

后端 未结 3 908
星月不相逢
星月不相逢 2020-11-29 16:33

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

相关标签:
3条回答
  • 2020-11-29 17:00

    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.)

    0 讨论(0)
  • 2020-11-29 17:15

    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.

    0 讨论(0)
  • 2020-11-29 17:17

    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" ) ) {
       // ...
    }
    
    0 讨论(0)
提交回复
热议问题