正确使用Java-D命令行参数
在Java中传递a-D参数时,编写命令行然后从代码中访问它的正确方法是什么 例如,我试过写这样的东西正确使用Java-D命令行参数,java,command-line,parameters,Java,Command Line,Parameters,在Java中传递a-D参数时,编写命令行然后从代码中访问它的正确方法是什么 例如,我试过写这样的东西 if (System.getProperty("test").equalsIgnoreCase("true")) { //Do something } java -jar myApplication.jar -Dtest="true" 然后像这样称呼它 if (System.getProperty("test").equalsIgnoreCase("true")) { //Do
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
java -jar myApplication.jar -Dtest="true"
然后像这样称呼它
if (System.getProperty("test").equalsIgnoreCase("true"))
{
//Do something
}
java -jar myApplication.jar -Dtest="true"
但我收到一个NullPointerException。我做错了什么?我怀疑问题是您在
-jar
后面放了“-D”。试试这个:
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 b = Boolean.parseBoolean( System.getProperty( "test" ) );
请注意,该方法委托系统属性值,从而将代码简化为:
if( Boolean.getBoolean( "test" ) ) {
// ...
}
您将参数赋予程序,而不是Java。使用
java -Dtest="true" -jar myApplication.jar
相反
考虑使用
"true".equalsIgnoreCase(System.getProperty("test"))
避免NPE。但不要总是不假思索地使用“尤达条件”,有时投掷NPE是正确的行为,有时是类似的行为
System.getProperty("test") == null || System.getProperty("test").equalsIgnoreCase("true")
是正确的(提供默认值true)。较短的可能性是
!"false".equalsIgnoreCase(System.getProperty("test"))
但不使用双重否定并不能减少误解。现在非常有效。另外值得注意的是,为了在Eclipse调试器中复制这种行为,这些类型的参数必须放在运行配置下的VM Arguments部分,我整天都用这个来打蚂蚁电话。我花了多少时间打这个电话,感觉有点傻!谢谢你指出这一点。:)如果有人想知道,如果要传递多个属性,只需在“space”java-D=-D=-D=…之后多次使用-D,实际上,System.getProperty(“test”,“true”).equalsIgnoreCase(“true”)
将是编写最后一个条件的更好方法。Boolean.getBoolean(“test”)代码>是另一个选项@Paulo您的解决方案仅适用于属性(我想展示一个通用的解决方案),但比我的解决方案更好。有趣的是:在这个答案中,JVM参数位于-jar标志之后,而在另一个答案中,它位于“java”之后,但在-jar标志之前。然后,我认为他们的关键只是JVM参数在JAR文件本身之前,在这种情况下“MyApple .jar”竖起大拇指,用这种明显的方式来证明双否定的点。考虑使用<代码> CaseReTyEngase而不是<代码>均衡器> /代码>用于区域无关的标识符;否则,您可能会遇到土耳其语的“四是”问题。我建议您使用Boolean.getBoolean而不是您的长if语句,好吗?-D代表什么?最后一位也适用于:Integer.getInteger(“test”);Long.getLong(“test”)
假设您有-Dtest=123