正确使用Java -D命令行参数
在Java中传递-D参数时,写入命令行然后从代码访问它的正确方法是什么?
例如,我曾尝试写这样的东西…
if (System.getProperty("test").equalsIgnoreCase("true")) { //Do something }
然后像这样调用…
java -jar myApplication.jar -Dtest="true"
但是我收到一个NullPointerException。 我究竟做错了什么?
我怀疑问题是你已经把-D放在了-jar
。 尝试这个:
java -Dtest="true" -jar myApplication.jar
从命令行帮助:
java [-options] -jar jarfile [args...]
换句话说,你现在的方式将把-Dtest="true"
作为传递给main
的参数之一,而不是作为JVM参数。
(你也许应该放弃引号,但无论如何它可能工作 – 这可能取决于你的shell。)
这应该是:
java -Dtest="true" -jar myApplication.jar
那么下面将返回值:
System.getProperty("test");
但值可能为null
,所以使用Boolean
来防止exception:
boolean b = Boolean.parseBoolean( System.getProperty( "test" ) );
请注意, getBoolean
方法委托系统属性值,将代码简化为:
if( Boolean.getBoolean( "test" ) ) { // ... }
您将parameter passing给您的程序,而不是Java。 使用
java -Dtest="true" -jar myApplication.jar
代替。
考虑使用
"true".equalsIgnoreCase(System.getProperty("test"))
避免NPE。 但不要总是用“ 尤达条件 ”来思考,有时候抛出NPE是正确的行为,有时候也是这样的
System.getProperty("test") == null || System.getProperty("test").equalsIgnoreCase("true")
是正确的(提供默认值)。 更短的可能性是
!"false".equalsIgnoreCase(System.getProperty("test"))
但不使用双重否定不会使人难以理解。