为什么System.getProperties()为-D定义的属性返回null?

时间:2015-09-18 11:13:03

标签: java jvm-arguments

我正在使用

运行一个jarball
java -classpath myBatch.jar some.package.MyMainClass \
     -bloodyArgument "I got the argument!" -Dbloody.prop="I got the prop!"

然后在我的主要内容中:

Properties argsProps = BatchUtils.argsToProperties(args);
System.out.println(argsProps.getProperty("bloodyArgument"));
System.out.println(System.getProperty("bloody.prop"));

我得到输出:

I got the argument!
null

我可以看到命令行bloodyArgument(我添加它以查看“某事”是否传递给程序),但我希望 -D 参数设置系统属性。为什么“bloody.prop”为空?

PS:BatchUtils.argsToProperties()执行您期望它执行的操作:将 -argName“value”从命令行解析为 argName = value 属性对。

1 个答案:

答案 0 :(得分:3)

java命令的类参数之后的所有传递给您在String [] args 中的main,并且不会将其传递给JVM。

解决方案是重新排列这样的属性:

java -classpath myBatch.jar -Dbloody.prop="I got the prop!" \
     some.package.MyMainClass -bloodyArgument "I got the argument!" 

我在使用http://duckduckgo.com唠叨网络或搜索“null -D defined property”的这个队列时,没有明确说明这一点。在打印所有系统属性和整个参数数组时,我想了很多,所以我发布给其他人。