我正在使用
运行一个jarballjava -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 属性对。
答案 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”的这个队列时,没有明确说明这一点。在打印所有系统属性和整个参数数组时,我想了很多,所以我发布给其他人。