2012-09-20 13 views

Odpowiedz

29

Zawsze zakłada się, że było określić wartość nieruchomości ... prawdopodobnie pozostałością z kompilatory C, które często korzystają z -D jako podobny do #define w kodzie.

EDIT: Najbliżej mam do źródła na to w tej chwili jest some JDK 1.1 documentation który określa flagę jako:

przedefiniowuje wartość nieruchomości. propertyName to nazwa właściwości, której wartość chcesz zmienić, a newValue to wartość, na którą chcesz ją zmienić. [...]

że przynajmniej zawiera słowo "przedefiniowania", który znajduje się blisko "zdefiniować" :)

+0

Chciałbym zobaczyć źródło tego, jeśli istnieje. – kurtzbot

+0

Cześć Jon, nie jest to całkowicie związane z tym pytaniem, ale nie mogę znaleźć tej informacji nigdzie indziej, czytałem w dokumentach: https://docs.oracle.com/javase/7/docs/technotes /tools/windows/java.html 'java -Dmydir =" jakiś ciąg "SomeClass' część' SomeClass' do której klasy się odnosi? Używam go, aby uzyskać zewnętrzny plik '.properties', modyfikujący niektóre atrybuty w moim programie, używając Spring, Struts2 i Tomcat 8.5. Myślę, że odnosi się to do klasy z metodą "główną", ale w moim przypadku żadna metoda "main" nie istnieje, ponieważ jest to aplikacja internetowa, czy mógłbyś mi to wyjaśnić? – Frakcool

+0

@Frakcool: Tak, to punkt wejścia do procesu. Kiedy uruchamiasz Tomcat, generalnie nie wywołujesz go w ten sposób. Proponuję zadać nowe pytanie z większą ilością szczegółów na temat tego, o co prosisz. –

6

Powodem jest D oznacza DEFINE, bo co to przełącznik poleceń ma definiuje zmienne.

2

To może być dla Define, bo są zdefiniowaniu właściwości

12

w C/C++ kompilatory podobna składnia służy do definiowania makr preprocesora z wiersza poleceń:

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

.

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

Java nie posiada preprocesora, ale właściwości zdefiniowane z -D ofter są stosowane do podobnego powodu - aby zdać jakiś program specyficzne informacje o bieżącym środowisku. Jedyna różnica polega na tym, że w Javie przekazujemy je w czasie wykonywania, a nie w czasie kompilacji:

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

.

java -Dgreeting="Hello, world" Hello 

Myślę, że to podobieństwo jest źródłem podobnej składni.

+0

Dzięki za szczegóły C/C++, ma sens, że -D został przeniesiony z tego miejsca. – septerr