1

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-assembly-plugin并且用于将依赖项捆绑到 JAR 中。

4

2 回答 2

0

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

然而,事实证明,在编辑我正在编辑的单片命令链(其中包含此java -jar命令)时,我错误地创建了另一个不正确的命令结构:java -jar -Dmy.prop=value my.jar.

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

所以这个故事的寓意是:确保你在命令-jar my.jar结束时有权利。java总是!

于 2013-01-29T13:44:05.570 回答
0

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

几种可能的解释:

  • 正在执行的实际命令与此不同。也许您的启动脚本中存在错误或其他问题。(尝试使用“set -x”让 shell 告诉你实际的命令选项是什么。)

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

于 2013-01-29T13:46:26.663 回答