Java 使用命令行设置系统 属性
Java setting system property using command line
在阅读 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
问题是:这是一个错误还是故意的行为。它看起来确实是一个错误,因为在大多数程序中,命令在命令行中并不重要。
-D
需要在 class 名称之前,因为 在 [=23] 之后=] 名称被视为 Java 应用程序本身的参数...并且 Java 应用程序可以选择使用 -D
或任何其他 JVM 选项做任何它喜欢的事情。
基本上,语法是:
java [jvm-args] class-name [application-args]
系统属性(以及类路径等其他选项)需要在程序参数之前传递。见 usage page:
java [ options ] class [ arguments ]
在阅读 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
问题是:这是一个错误还是故意的行为。它看起来确实是一个错误,因为在大多数程序中,命令在命令行中并不重要。
-D
需要在 class 名称之前,因为 在 [=23] 之后=] 名称被视为 Java 应用程序本身的参数...并且 Java 应用程序可以选择使用 -D
或任何其他 JVM 选项做任何它喜欢的事情。
基本上,语法是:
java [jvm-args] class-name [application-args]
系统属性(以及类路径等其他选项)需要在程序参数之前传递。见 usage page:
java [ options ] class [ arguments ]