使用命令行设置Java系统属性

使用命令行设置Java系统属性,java,command-line,jvm-arguments,system-properties,Java,Command Line,Jvm Arguments,System Properties,在阅读javaman页面时,我发现了-Dproperty=value标志,该标志表明通过传递该标志,它将创建一个value=value的系统属性。 我编写了一个测试java代码: class File{ public static void main(String[] args){ System.out.println("HOLA"); System.out.println(System.getProperty("blah")); } } 我用j

在阅读java
man
页面时,我发现了
-Dproperty=value
标志,该标志表明通过传递该标志,它将创建一个value=value的系统属性。 我编写了一个测试java代码:

class File{
    public static void main(String[] args){
        System.out.println("HOLA");
        System.out.println(System.getProperty("blah"));
    }
}
我用
javac File.java
编译了同样的代码,然后用
java File-Dblah=blah命令运行,但是我得到了以下输出

HOLA
null
然后我使用as
java-Dblah=blah文件运行,然后得到了预期的输出:

HOLA
blah

问题是:这是一个bug还是一个故意的行为。这看起来确实是一个bug,因为在大多数程序中,命令行中的顺序并不重要

D
必须位于类名之前,因为类名之后的任何内容都被视为Java应用程序本身的参数。。。Java应用程序可以选择使用
-D
或任何其他JVM选项执行任何它喜欢的操作

基本上,语法是:

java [jvm-args] class-name [application-args]
系统属性(以及类路径等其他选项)需要在程序参数之前传递。见:

java [ options ] class [ arguments ]