Classpath là danh sách các vị trí để tải các lớp từ đó.
Các 'vị trí' này có thể là thư mục hoặc tệp jar.
Đối với các thư mục, JVM sẽ tuân theo một mẫu dự kiến để tải một lớp. Nếu tôi có thư mục C: / myproject / class trong classpath của mình và tôi cố gắng tải một lớp com.mycompany.Foo , nó sẽ tìm trong thư mục lớp cho một thư mục có tên là com , sau đó trong thư mục đó có tên là mycompany , và cuối cùng nó sẽ tìm kiếm một tệp có tên là Foo.class trong thư mục đó.
Trong trường hợp thứ hai, đối với các tệp jar, nó sẽ tìm kiếm tệp jar cho lớp đó. Trên thực tế, một tệp jar chỉ là một tập hợp các thư mục được nén như trên. Nếu bạn giải nén một tệp jar, bạn sẽ nhận được một loạt các thư mục và tệp lớp theo mẫu ở trên.
Vì vậy, JVM đi qua một classpath từ đầu đến cuối để tìm kiếm định nghĩa của lớp khi nó cố gắng tải định nghĩa lớp. Ví dụ, trong classpath:
C: / myproject / class; C: /myproject/lib/stuff.jar; C: /myproject/lib/otherstuff.jar
JVM sẽ cố gắng tìm trong thư mục lớp học đầu tiên, sau đó trong stuff.jar và cuối cùng trong otherstuff.jar .
Khi bạn nhận được ClassNotFoundException, điều đó có nghĩa là JVM đã duyệt qua toàn bộ classpath và không tìm thấy lớp mà bạn đã cố gắng tham chiếu. Giải pháp thường xuyên xảy ra trong thế giới Java là kiểm tra classpath của bạn.
Bạn xác định một classpath trên dòng lệnh bằng cách nói java -cp và sau đó là classpath của bạn. Trong một IDE chẳng hạn như Eclipse, bạn sẽ có một tùy chọn menu để chỉ định classpath của mình.