2010-01-29 37 views
16

Sẽ sử dụng tùy chọn -classpath với java, thêm hoặc thay thế nội dung của biến số CLASSPATH env?Tùy chọn đường dẫn Java-class

+3

Câu hỏi hay. Tôi chưa bao giờ nghĩ về nó – marionmaiden

+1

Bạn có muốn biết biến môi trường có bị thay đổi không? Bạn đã chạy một thử nghiệm để thực sự * xem * nếu nó thay đổi? –

+0

Tại sao bạn không tự thử? –

Trả lời

14

Sử dụng biến classpath sẽ ghi đè biến CLASSPATH of Environment nhưng chỉ cho phiên đó. Nếu bạn khởi động lại ứng dụng, bạn cần phải thiết lập lại biến classpath.

+1

Hoàn hảo. Cảm ơn girienie cho một câu trả lời ngắn gọn. Bạn phải là chuyên gia Java :) – Zacky112

+0

@ Zack112: Câu hỏi rất quan trọng .. Cảm ơn :) – giri

5

Có. Trích dẫn từ trang java(1) người đàn ông:

-classpath classpath 
    -cp classpath 
      Specifies a list of directories, JAR archives, and ZIP archives to search for class files. Class 
      path entries are separated by colons (:). Specifying -classpath or -cp overrides any setting of the 
      CLASSPATH environment variable. 

      If -classpath and -cp are not used and CLASSPATH is not set, the user class path consists of the cur- 
      rent directory (.). 
+2

Biến môi trường là * không * cập nhật ở tất cả, theo điều này. Tôi không thấy câu trả lời là "có". –

+2

@ S.Lott - Từ quan điểm của ai? Từ quan điểm * của chương trình *, giá trị CLASSPATH (nếu nó tồn tại) được thay thế. Từ điểm * của * xem của giá trị CLASSPATH không thay đổi. Tôi nghĩ rằng câu hỏi ban đầu chỉ là một từ ngữ xấu. – Nate

6

Hoặc một trong các tùy chọn được sử dụng, không phải cả hai.

Chỉ định-classpath hoặc -cp ghi đè bất kỳ cài đặt nào của biến môi trường CLASSPATH.

...

Tùy chọn -classpath được ưa thích vì bạn có thể thiết lập nó riêng cho mỗi ứng dụng mà không ảnh hưởng đến các ứng dụng khác và không có các ứng dụng khác thay đổi giá trị của nó.

...

Thiết lập biến CLASSPATH hoặc sử dụng các tùy chọn dòng lệnh -classpath ghi đè mặc định, vì vậy nếu bạn muốn bao gồm các thư mục hiện tại trong con đường tìm kiếm, bạn phải bao gồm " . " trong cài đặt mới.

6

Việc sử dụng tùy chọn -cp sẽ không ảnh hưởng đến biến môi trường CLASSPATH.

Bạn có thể thử đoạn mã nhỏ này để kiểm tra này:

public class CPTest { 
    public static void main (final String[] args) { 
     String cp = System.getenv("CLASSPATH"); 
     System.out.println(cp); 
    } 
} 
%echo $CLASSPATH 
/home/test/:. 

Sản lượng mà không lựa chọn -cp:

%java CPTest 
/home/test/:. 

Sản lượng với tùy chọn -cp:

%java -cp /home/xanadu:. CPTest 
/home/test/:. 

Đầu ra là giống nhau cho cả hai lời gọi (một với -cp và một không có).

Ngoài ra một trong hai con đường được quy định trong CLASSPATH biến môi trường là
sử dụng hoặc các đường dẫn cụ thể với -cp tùy chọn được sử dụng. Nó không phải là một kết hợp của cả hai nó là một trong số họ.

Điều này hiển nhiên từ lời gọi bên dưới. Nếu CWD (hiện tại thư mục làm việc "")
được loại trừ khỏi tùy chọn -cp, launcher JVM (tức là java) không thể tìm thấy tập tin
lớp mặc dù các biến môi trường CLASSPATH chứa CWD ("") trong đó.

%java -cp /home/test CPTest 
Exception in thread "main" java.lang.NoClassDefFoundError: CPTest 
Các vấn đề liên quan