classpath คือรายการของตำแหน่งที่จะโหลดคลาส
'ตำแหน่งที่ตั้ง' เหล่านี้อาจเป็นไดเร็กทอรีหรือไฟล์ jar
สำหรับไดเร็กทอรี JVM จะเป็นไปตามรูปแบบที่คาดไว้สำหรับการโหลดคลาส ถ้าฉันมีไดเร็กทอรีC: / myproject / คลาสใน classpath ของฉันและฉันพยายามโหลดคลาสcom.mycompany.Fooมันจะดูภายใต้ไดเร็กทอรีคลาสสำหรับไดเร็กทอรีที่เรียกว่าcomจากนั้นภายใต้ไดเร็กทอรีที่เรียกว่าmycompanyและ ในที่สุดก็จะค้นหาไฟล์ชื่อFoo.classในไดเร็กทอรีนั้น
ในตัวอย่างที่สองสำหรับไฟล์ jar จะค้นหาไฟล์ jar สำหรับคลาสนั้น ในความเป็นจริงไฟล์ jar เป็นเพียงคอลเลกชันของไดเร็กทอรีแบบซิปดังที่กล่าวมาข้างต้น หากคุณคลายซิปไฟล์ jar คุณจะได้รับไดเรกทอรีและไฟล์คลาสมากมายตามรูปแบบด้านบน
ดังนั้น JVM จะข้ามผ่านคลาสพา ธ ตั้งแต่ต้นจนจบเพื่อค้นหานิยามของคลาสเมื่อพยายามโหลดนิยามคลาส ตัวอย่างเช่นใน classpath:
C: / myproject / คลาส; C: /myproject/lib/stuff.jar; C: /myproject/lib/otherstuff.jar
JVM ที่จะพยายามที่จะมองในไดเรกทอรีเรียนก่อนแล้วในstuff.jarและในที่สุดotherstuff.jar
เมื่อคุณได้รับ ClassNotFoundException นั่นหมายความว่า JVM ได้ข้ามผ่านคลาสพา ธ ทั้งหมดและไม่พบคลาสที่คุณพยายามอ้างอิง วิธีแก้ปัญหาเช่นเดียวกับในโลก Java คือการตรวจสอบคลาสพา ธ ของคุณ
คุณกำหนด classpath บนบรรทัดคำสั่งโดยพูดjava -cpแล้วตามด้วย classpath ของคุณ ใน IDE เช่น Eclipse คุณจะมีตัวเลือกเมนูเพื่อระบุ classpath ของคุณ