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

5

在阅读Java man页面时,我发现了-Dproperty=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

然后我运行了 java -Dblah=blah File,然后得到了预期的输出:

HOLA
blah

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

7
-D需要在类名之前出现,因为位于类名之后的任何内容都被视为Java应用程序本身的参数...并且Java应用程序可以选择使用-D或任何其他JVM选项进行任何操作。

基本上,语法是:

java [jvm-args] class-name [application-args]

6

在传递程序参数之前,需要传递系统属性(和其他选项,如类路径)。请参阅使用页面

java [ options ] class [ arguments ]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接