OpenJDK 64位Java 1.6:不';是否不支持CLI系统属性中的点?

OpenJDK 64位Java 1.6:不';是否不支持CLI系统属性中的点?,java,command-line,properties,system,openjdk,Java,Command Line,Properties,System,Openjdk,Java版本打印如下: $ java -version java version "1.6.0_24" OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1) OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode) 当这样传递属性时: java -Dmy.property=value -jar my.jar …未能在代码中解析: System.

Java版本打印如下:

$ java -version
java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.5) (6b24-1.11.5-0ubuntu1~12.04.1)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)
当这样传递属性时:

java -Dmy.property=value -jar my.jar
…未能在代码中解析:

System.getProperty("my.property") // => null
但是,使用下划线代替点可以很好地工作:

// CLI
java -Dmy_property=value -jar my.jar
// In the code:
System.getProperty("my_property") // => "value"
这不是不规范的行为吗


如果相关的话,JAR是通过Maven构建的,
Maven汇编插件
用于将依赖项捆绑到JAR中。

最初我使用的是不正确的格式
java-JAR my.JAR-Dmy.prop=value
,而不是正确的
java-Dmy.prop=value-JAR my.JAR
。但我很早就意识到了这一点,并修改了参数顺序

然而,结果是,在编辑我正在编辑的命令的整体链时(其中有一个
java-jar
命令),我错误地创建了另一个不正确的命令结构:
java-jar-Dmy.prop=value my.jar

我第一次使用下划线时,命令被重写,因此无意中修复了后一个不正确的参数结构


因此,这个故事的寓意是:确保在
java
命令的末尾有
-jar my.jar
。永远

当您这样设置属性名时,Java支持属性名中的点

有几种可能的解释:

  • 实际执行的命令与此不同。也许你的启动脚本中有个bug什么的。(尝试使用“set-x”让shell告诉您实际的命令选项是什么。)

  • 在调用您正在查看的
    getProperty
    之前,应用程序的其他部分正在取消设置该特定属性


这似乎很奇怪,因为dot有很多不同的标准选项(比如
-Djava.net.ssl.truststore=somekeystore.jks
)。告诉我吧!我正在尝试找出问题所在,解决后将在这里发布。感谢您花时间回复。你的第一个建议是正确的——见下面我的答案。