2012-09-20 13 views

risposta

29

Ho sempre pensato che era a definire il valore di una proprietà ... forse un retaggio compilatori C, che spesso utilizzano -D come simile a #define nel codice.

EDIT: Il più vicino che ho da una fonte per questo al momento è some JDK 1.1 documentation che specifica la segnala come:

ridefinisce un valore di proprietà. propertyName è il nome della proprietà di cui si desidera modificare il valore e newValue è il valore in cui cambiarlo. [...]

Questo almeno contiene la parola "ridefinire", che è vicino a "definire" :)

+0

Sarei interessato a vedere una fonte per questo, se esiste. – kurtzbot

+0

Ciao Jon, questo non è completamente correlato a questa domanda, ma non riesco a trovare queste informazioni da nessun'altra parte, ho letto dai documenti: https://docs.oracle.com/javase/7/docs/technotes /tools/windows/java.html 'java -Dmydir =" una stringa "SomeClass' la parte di' SomeClass' a quale classe si riferisce? Lo sto usando per ottenere un file '.properties' esterno che modifica alcuni attributi sul mio programma, usando Spring, Struts2 e Tomcat 8.5. I miei pensieri sono che si riferisce alla classe con il metodo 'main', ma nel mio caso non esiste un metodo' main' in quanto è un'applicazione web, potresti spiegarmelo? – Frakcool

+0

@Frakcool: Sì, è il punto di ingresso per il processo. Tuttavia, quando esegui Tomcat, generalmente non lo invochi in questo modo. Ti suggerisco di fare una nuova domanda con maggiori dettagli su ciò che stai chiedendo. –

6

Il motivo è D sta per DEFINE, perché quello che l'interruttore di comando fa è definire le variabili.

2

Potrebbe essere per Define, perché si sta definendo una proprietà

12

In C/C++ compilatori la sintassi simile è utilizzato per definire le macro preprocessore dalla riga di comando:

#include <stdio.h> 
int main(int argc, char* argv[]) { 
    printf(GREETING); 
    return 0; 
} 

.

gcc hello.c -DGREETING="\"Hello, world\"" 

Java non ha un preprocessore, ma con proprietà definite -D sono ofter utilizzato per il motivo simile - di passare alcune informazioni specifiche del programma per l'ambiente corrente. L'unica differenza è che in Java li passiamo in runtime, non in fase di compilazione:

public class Hello { 
    public static void main(String[] args) { 
     System.out.println(System.getProperty("greeting")); 
    } 
} 

.

java -Dgreeting="Hello, world" Hello 

Penso che questa somiglianza sia la fonte di sintassi simile.

+0

Grazie per i dettagli C/C++, ha senso il -D è stato portato avanti da lì. – septerr