2012-02-17 17 views
8

Tôi đang cố gắng hiểu cách classpath thực sự hoạt động. Sau khi tìm kiếm khắp nơi trên web này là nơi tôi đã đạt đến nay:Đường dẫn lớp Java - Linux

Tôi đã thêm

export CLASSPATH="/home/foo:/home/foo/Java_code/my_code" 

tại /etc/environment. Tôi đang chạy Ubuntu bằng cách này.

Java tìm đường dẫn và biên dịch mà không gặp sự cố.

Vấn đề là nếu tôi thay đổi CLASSPATH và sau đó tôi làm: source /etc/environment, CLASSPATH mới không được áp dụng. Nó được áp dụng nếu và chỉ khi tôi khởi động lại hệ thống. Ví dụ nếu tôi xoá dòng

export CLASSPATH="/home/foo:/home/foo/Java_code/my_code" 

, sau đó tôi làm source/etc/môi trường và cuối cùng tôi làm echo $CLASSPATH, những gì tôi nhận được là /home/foo:/home/foo/Java_code/my_code. Tôi nghĩ rằng tôi sẽ nhận được một dòng sản phẩm nào, phải không?

Có cách nào để áp dụng các thay đổi trong biến PATH hoặc CLASSPATH ngay lập tức mà không phải khởi động lại hệ thống không?

Nó có thể giúp bạn biết rằng/tập tin môi trường/etc ban đầu chỉ chứa các dòng sau:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" 

Cảm ơn bạn đã dành thời gian.

+0

Bạn xóa đường dẫn lớp như thế nào? –

+0

tại sao bạn làm tất cả những thứ đó, môi trường của bạn là gì?/etc/environment được sử dụng để định nghĩa các biến môi trường cho các ứng dụng đồ họa. Nếu bạn có đồ họa, bạn có thể sử dụng IDE. Tại sao đi đến tất cả các rắc rối này với bao gồm cả thư mục nhà của bạn + dự án trong classpath? – hovanessyan

+0

Tôi chỉ cố gắng đặt CLASSPATH vĩnh viễn để nhập các gói từ các thư mục cụ thể mà không cần phải xác định nó mỗi khi tôi chạy javac. – tomatoeggs

Trả lời

5

Tôi nghĩ bạn không nên đặt bất kỳ đường dẫn nào là địa phương vào thư mục chính của bạn trong một tệp toàn hệ thống. Tôi sẽ để lại /etc/environment một mình, trừ khi bạn cung cấp một số thay đổi, điều đó là cần thiết hoặc có lợi cho tất cả người dùng. Đặt bất kỳ thay đổi nào cho CLASSPATH trong số .bashrc trong thư mục chính của bạn.

CLASSPATH=$CLASSPATH:/home/foo:/home/foo/Java_code/my_code 
    export CLASSPATH 

Bằng cách này bạn có thể nguồn và bất kỳ bash mới được bắt đầu nào sẽ có cài đặt ngay lập tức.

+1

Nó hoạt động tốt. Bây giờ mọi thứ có vẻ trơn tru. Cảm ơn sự giúp đỡ của bạn. – tomatoeggs

2

Khi bạn loại bỏ

export CLASSPATH="/home/foo:/home/foo/Java_code/my_code" 

dòng và sau đó source ... nó sẽ không loại bỏ các CLASSPATH bởi vì nó đã được thiết lập. Nó không xóa các biến đã được xác định.

+0

Vậy cách duy nhất là khởi động lại hệ thống của tôi để áp dụng CLASSPATH mới? – tomatoeggs

+0

Bạn có thể đặt 'xuất CLASSPATH ="/home/foo:/home/foo/Java_code/my_code " ' vào tệp '.bashrc' trong direction' ~ 'của bạn để đặt biến mỗi khi bạn đăng nhập. Để bỏ đặt biến CLASSPATH, làm 'unset CLASSPATH' –

+0

Cảm ơn bạn Sapan. Ý kiến ​​của bạn thực sự đã giúp tôi. Mọi thứ đều trơn tru. – tomatoeggs

1

Tệp /etc/environment không phải là tập lệnh shell bình thường; nó không được thực hiện như một kịch bản lệnh shell khi bạn khởi động hoặc đăng nhập vào hệ thống của bạn. Vì vậy, chạy nó với source /etc/environment không giống như khi bạn khởi động hệ thống của bạn bình thường.

Xem: Ubuntu environment variables

/etc/environment - Tập tin này có nghĩa là đặc biệt cho các thiết lập biến môi trường trên toàn hệ thống. Đây không phải là tệp tập lệnh, nhưng thay vào đó bao gồm các biểu thức gán, mỗi biểu thức một dòng. Cụ thể, tệp này lưu trữ cài đặt ngôn ngữ và đường dẫn toàn bộ hệ thống.

+0

Cảm ơn bạn Jesper. Thông tin của bạn thực sự có giá trị. – tomatoeggs

4
export CLASSPATH="" 

hoặc tốt hơn

unset CLASSPATH 

sẽ xóa một Classpath hiện có. Có nhiều vị trí nơi bạn có thể đặt hoặc bỏ đặt đường dẫn lớp - một mục bị thiếu sẽ không bỏ đặt nó.

Các vấn đề liên quan