在Java中,-D代表什么?

47

在"Docker"中,D代表什么意思?

-Dproperty=value

设置系统属性值。

Java应用程序启动器代表什么?由于某些原因一直困扰着我,为什么是D?

4个回答

51

我一直认为这是为了定义属性的值...可能是C编译器的遗留问题,它们通常将-D用作代码中#define的类似物。

编辑:目前我找到的最接近来源是JDK 1.1文档,其中指定了标记为:

  

重新定义属性值。 propertyName是要更改其值的属性名称,newValue是要更改的值。[...]

至少包含了与"define"接近的"redefine"一词 :)


如果有的话,我很想看一下这个的来源。 - kurtzbot
嗨Jon,这与问题并不完全相关,但我在任何其他地方都找不到这些信息,我已经从文档中阅读了:https://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html java -Dmydir =“some string” SomeClass 其中的“SomeClass”部分是指哪个类?我正在使用它来获取外部的.properties文件,在我的程序中修改某些属性,使用Spring,Struts2和Tomcat 8.5。我的想法是它是指具有main方法的类,但在我的情况下,没有main方法,因为它是一个Web应用程序,你能解释一下吗? - Frakcool
@Frakcool:是的,这是进程的入口点。但当你运行Tomcat时,通常不会以那种方式调用它。我建议你提出一个新问题,并提供更多关于你所问内容的细节。 - Jon Skeet

26

在 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

我认为这种相似性是类似语法的来源。


4
谢谢提供 C/C++ 的详细信息,-D 从那里沿用的确很有道理。 - septerr

11

这个命令的开关D代表定义(DEFINE),因为它的作用是定义变量。


3

这可能是针对定义的,因为您正在定义属性。


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