有没有办法使java -DFOOBAR=foobar
有效?无法检索属性值。如果我这样做java -Dfoobar=foobar
没问题。 Java命令行属性名称是否必须始终以小写字母开头?到目前为止无法找到确定的答案或解决方法,以大写字母的形式使用属性名称。
我使用Bash shell从命令行调用java:
$ java -DFOOBAR=foobar -Dfoobar=foobar
我从Prolog(JIProlog)的Java实现中访问属性值:
JIP:-invoke('java.lang.System', getProperty('java.lang.String'), ['foobar'], Value).
Yes
Value = foobar
JIP:-invoke('java.lang.System', getProperty('java.lang.String'), ['FOOBAR'], Value).
Yes
Value = []
P.S。它确实是一个JIProlog错误。使用Prolog(Lean Prolog)的另一个Java实现,访问FOOBAR
和foobar
属性都没有问题:
main ?- call_java_class_method('java.lang.System', getProperty(foobar), Result).
Result = foobar
No (more) answers.
main ?- call_java_class_method('java.lang.System', getProperty('FOOBAR'), Result).
Result = FOOBAR
No (more) answers.
答案 0 :(得分:2)
命令行上的String.getProperties和-D没有任何限制。
给出以下符文,它将帮助您确定出错的地方。最可能的解释是:a)当你从命令行调用时有一个拼写错误,2)或者代码中有拼写错误。
以下代码将打印出检测到的每个属性及其值,以及FOOBAR / foobar检查。
System.out.println( "FOOBAR="+System.getProperty("FOOBAR"));
System.out.println( "foobar="+System.getProperty("foobar"));
System.getProperties().list(System.out);
运行此代码时,请注意大多数属性名称都是小写。
答案 1 :(得分:0)
我认为这与Java本身无关。我相信你正在使用的shell中的命令行解析器是负责任的。你试过java -D“FOOBAR”= foobar?
答案 2 :(得分:-1)
正常情况下。变量名的Java属性是小写字母,如:userName,ShowMessage,但有特殊情况,考虑到某些有趣的英文缩写(USA,XML等),JavaBean也允许以大写字母开头的属性变量名,但必须满足变量的前两个字母是全部大写或全部小写“要求,例如:IDCODE IC卡IDCODE属性变量名称是合法的,但iC,iCcard,iDCode属性变量名称是非法的。