Đường dẫn lớp là nơi diễn ra trình biên dịch java (lệnh: javac) và giao diện JVM (lệnh: java) để tìm các lớp mà ứng dụng của bạn tham chiếu. Có nghĩa là gì đối với một ứng dụng tham chiếu đến một lớp học khác? Nói một cách đơn giản, nó có nghĩa là sử dụng lớp đó ở đâu đó trong mã của nó:
Ví dụ:
public class MyClass{
private AnotherClass referenceToAnotherClass;
.....
}
Khi bạn cố gắng để biên dịch này (javac) trình biên dịch sẽ cần lớp AnotherClass. Cũng giống như khi bạn cố chạy ứng dụng của mình: JVM sẽ cần lớp AnotherClass. Để tìm lớp này, javac và JVM sẽ tìm một (các) địa điểm cụ thể. Những địa điểm này được chỉ định bởi classpath mà trên linux là một danh sách phân tách các thư mục được phân cách bằng dấu hai chấm (các thư mục mà javac/JVM sẽ tìm để xác định vị trí của AnotherClass khi chúng cần).
Vì vậy, để biên dịch lớp học của bạn và sau đó để chạy nó, bạn nên đảm bảo rằng classpath chứa thư mục chứa lớp AnotherClass. Sau đó, bạn gọi nó như sau:
javac -classpath "dir1;dir2;path/to/AnotherClass;...;dirN" MyClass.java //to compile it
java -classpath "dir1;dir2;path/to/AnotherClass;...;dirN" MyClass //to run it
Các lớp thông thường có dạng "gói" được gọi là tệp/thư viện jar.Trong trường hợp này, bạn phải chắc chắn rằng jar chứa các lớp AnotherClass là trên classpaht của bạn:
javac -classpath "dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" MyClass.java //to compile it
java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN" MyClass //to run it
Trong ví dụ trên, bạn có thể xem làm thế nào để biên dịch một lớp (MyClass.java) nằm trong thư mục làm việc và sau đó chạy lớp được biên dịch (Lưu ý "." ở đầu đường dẫn lớp mà viết tắt của thư mục hiện tại). Thư mục này cũng phải được thêm vào classpath. Nếu không, JVM sẽ không thể tìm thấy nó.
Nếu bạn có lớp học trong tệp jar, như bạn đã chỉ định trong câu hỏi, thì bạn phải đảm bảo rằng bình cũng nằm trong đường dẫn lớp, cùng với các thư mục còn lại cần thiết.
Ví dụ:
java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;path/to/MyClass/jar...;dirN" MyClass //to run it
hoặc tổng quát hơn (giả sử một số hệ thống phân cấp gói):
java -classpath ".;dir1;dir2;path/to/jar/containing/AnotherClass;path/to/MyClass/jar...;dirN" package.subpackage.MyClass //to run it
Để tránh thiết lập classpath mọi lúc bạn muốn chạy một ứng dụng mà bạn có thể định nghĩa một biến môi trường được gọi là CLASSPATH.
Trong Linux, tại dấu nhắc lệnh:
export CLASSPATH="dir1;dir2;path/to/jar/containing/AnotherClass;...;dirN"
hoặc chỉnh sửa ~/.bashrc và thêm dòng này ở đâu đó ở cuối;
Tuy nhiên, đường dẫn lớp có thể thay đổi thường xuyên, vì vậy, bạn có thể muốn đặt classpath thành tập hợp các thư mục cốt lõi, bạn cần thường xuyên và sau đó mở rộng đường dẫn lớp mỗi lần bạn chỉ cần cho phiên đó. Như thế này:
export CLASSPATH=$CLASSPATH:"new directories according to your current needs"
Bản sao có thể có của [Bao gồm tất cả các lọ trong một thư mục trong đường dẫn lớp Java] (https://stackoverflow.com/questions/219585/including-all-the-jars-in-a-directory -within-the-java-classpath) – Stewart