2012-09-20 33 views

Trả lời

29

Tôi đã luôn giả sử nó là xác định giá trị của một thuộc tính ... có thể là di sản từ trình biên dịch C, thường sử dụng -D tương tự như #define trong mã.

EDIT: Gần nhất tôi có một nguồn tin cho điều này vào lúc này là some JDK 1.1 documentation trong đó nêu rõ lá cờ như:

thức định nghĩa một giá trị bất động sản. propertyName là tên của thuộc tính có giá trị bạn muốn thay đổi và newValue là giá trị để thay đổi nó thành. [...]

Đó ít nhất chứa từ "định nghĩa lại", đó là gần với "định nghĩa" :)

+0

Tôi sẽ quan tâm đến việc xem một nguồn cho điều này, nếu nó tồn tại. – kurtzbot

+0

Xin chào Jon, điều này không hoàn toàn liên quan đến câu hỏi này, nhưng tôi không thể tìm thấy thông tin này ở bất kỳ nơi nào khác, tôi đã đọc từ các tài liệu: https://docs.oracle.com/javase/7/docs/technotes /tools/windows/java.html 'java -Dmydir =" một số chuỗi "SomeClass' là một phần của' SomeClass' mà lớp là nó đề cập đến? Tôi đang sử dụng nó để có được một tệp '.properties' bên ngoài sửa đổi các thuộc tính nhất định trên chương trình của tôi, sử dụng Spring, Struts2 và Tomcat 8.5. Suy nghĩ của tôi là nó đề cập đến lớp với phương thức 'main', nhưng trong trường hợp của tôi không có phương thức' main' nào tồn tại vì nó là một ứng dụng web, bạn có thể giải thích nó cho tôi không? – Frakcool

+0

@Frakcool: Vâng, đó là điểm vào cho quá trình này. Khi bạn chạy Tomcat, bạn thường không gọi nó theo cách đó. Tôi đề nghị bạn hỏi một câu hỏi mới với nhiều chi tiết hơn về những gì bạn đang hỏi. –

6

Lý do là D là viết tắt của DEFINE, bởi vì những gì mà command switch không định nghĩa biến.

2

Nó có thể là cho Define, nguyên nhân bạn đang xác định một tài sản

12

Trong C/C++ trình biên dịch cú pháp tương tự được sử dụng để định nghĩa macro Preprocessor từ dòng lệnh:

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

.

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

Java không có tiền xử lý, nhưng thuộc tính định nghĩa với -D được ofter sử dụng vì lý do tương tự - để vượt qua một số thông tin chương trình cụ thể về môi trường hiện hành. Sự khác biệt duy nhất là trong Java, chúng tôi chuyển chúng trong thời gian chạy, không phải trong thời gian biên dịch:

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

.

java -Dgreeting="Hello, world" Hello 

Tôi nghĩ sự giống nhau này là nguồn gốc của cú pháp tương tự.

+0

Cảm ơn các chi tiết C/C++, điều đó có nghĩa là -D đã được chuyển tiếp từ đó. – septerr