我一直认为这是为了定义属性的值...可能是C编译器的遗留问题,它们通常将-D
用作代码中#define
的类似物。
编辑:目前我找到的最接近来源是JDK 1.1文档,其中指定了标记为:
重新定义属性值。 propertyName是要更改其值的属性名称,newValue是要更改的值。[...]
至少包含了与"define"接近的"redefine"一词 :)
在 C/C++ 编译器中,使用类似语法来从命令行定义预处理宏:
#include <stdio.h>
int main(int argc, char* argv[]) {
printf(GREETING);
return 0;
}
.
gcc hello.c -DGREETING="\"Hello, world\""
Java没有预处理器,但是使用-D
定义的属性通常用于类似的目的——传递有关当前环境的一些特定于程序的信息。唯一的区别在于,在Java中我们在运行时而不是编译时传递它们:
public class Hello {
public static void main(String[] args) {
System.out.println(System.getProperty("greeting"));
}
}
.
java -Dgreeting="Hello, world" Hello
我认为这种相似性是类似语法的来源。
这个命令的开关D代表定义(DEFINE),因为它的作用是定义变量。
这可能是针对定义
的,因为您正在定义属性。
java -Dmydir =“some string” SomeClass
其中的“SomeClass”部分是指哪个类?我正在使用它来获取外部的.properties
文件,在我的程序中修改某些属性,使用Spring,Struts2和Tomcat 8.5。我的想法是它是指具有main
方法的类,但在我的情况下,没有main
方法,因为它是一个Web应用程序,你能解释一下吗? - Frakcool