Problem
โดย default ถ้าเราไม่กำหนดค่าของ class path ค่า default ของ class path จะเป็น directory ปัจจุบัน ซึ่งจะทำให้ Java compiler หรือ Java VM หา class เฉพาะใน directory ปัจจุบันเท่านั้น แต่ถ้าเราต้องการให้ Java compiler หรือ Java VM หา class ใน directory อื่นด้วย จะต้องทำอย่างไร ?
Solution
วิธี set class path บน Windows ทำได้สองวิธี ดังนี้
1. set CLASSPATH environment variable
วิธีระบุ class path แบบนี้ เป็นวิธีแบบดั้งเดิมตั้งแต่จาวา version แรก ๆ โดยเรากำหนด environment variable ที่ชื่อว่า CLASSPATH ขึ้นมา พร้อมกับระบุค่า class path ที่ต้องการ การ set environment variable แบบนี้ ก็ทำได้สองแบบ คือ
1.1 set CLASSPATH เป็น system variable โดยเลือกที่ My Computer แล้ว click ขวาเลือก Properties เลือกที่ Advanced tab แล้วกดที่ปุ่ม Environment Variables หน้าต่าง Environment Variables จะแสดงขึ้นมา ในส่วนของ System variables เราก็เลือก New เพื่อเพิ่ม variable ตัวใหม่เข้าไป โดยตั้งชื่อว่า CLASSPATH พร้อมกับระบุค่าของ class path ที่เราต้องการ อย่างเช่น ถ้า class file ของโปรแกรมเราอยู่ที่ c:\java\classes และ directory ปัจจุบัน เราก็ใส่เป็น c:\java\classes;. (สังเกตว่าบน Windows เราจะใช้ ";" คั่นรายชื่อ path บน Unix จะใช้ ":")
1.2 เราจะ set CLASSPATH เป็น variable สำหรับเฉพาะ console หนึ่ง ๆ เท่านั้นก็ได้ โดยตัวแปร CLASSPATH นี้จะมองเห็นได้เฉพาะใน console นั้น ๆ วิธี set ก็ทำโดยใช้คำสั่ง set ที่ command prompt ในหน้าจอ console นั้น ๆ อย่างเช่น
ถ้าต้องการ set ตัวแปร CLASSPATH
set CLASSPATH=c:\java\classes;.
ถ้าต้องการ clear ตัวแปร CLASSPATH
set CLASSPATH=
ถ้าต้องการดูค่าของตัวแปรทั้งหมดที่มีก็ใช้ค่ำสั่ง set
set
วิธีการระบุ class path โดยใช้ CLASSPATH environment variable แบบนี้ ไม่ค่อยเป็นที่นิยมกันเนื่องจาก การรันโปรแกรมจาวาทุกโปรแกรมในเครื่องจะใช้ class path ร่วมกัน ซึ่งอาจทำให้เกิดปัญหาในการโหลด class ได้ อย่างเช่น โปรแกรม P1 ต้องการโหลด class A version 1 แต่ โปรแกรม B ต้องการโหลด class A version 2 ดังนั้น ถ้าต้องการระบุ class path จะแนะนำให้ใช้วิธีที่สองมากกว่า คือระบุผ่าน option -classpath หรือ -cp ของคำสั่ง java
2. ระบุ class path โดยใช้ -classpath หรือ -cp option ของคำสั่ง java
เราสามารถระบุ class path สำหรับการรันโปรแกรมจาวาครั้งนั้น ๆ ได้ โดยใช้ -cp หรือ -classpath ของคำสั่ง java อย่างเช่น
java -cp c:\java\classes HelloWorld (สมมุติว่า class file ของ HelloWorld อยู่ใน directory c:\java\classes) หรือ
java -classpath c:\java\classes HelloWorld
วิธีนี้เป็นวิธีที่แนะนำให้ใช้กัน เนื่องจาก class path ของแต่ล่ะโปรแกรมที่เรารัน จะแยกกัน ไม่เกี่ยวข้องกัน ทำให้ไม่สับสนเวลาที่เราต้องระบุ class path ของโปรแกรมจาวาหลาย ๆ โปรแกรมบนเครื่องเดียวกัน
หลายคนคงสงสัยว่า ถ้ามีการระบุ class path ทั้งโดย CLASSPATH environment variable และ -classpath -cp option ของคำสั่ง java ในเวลาเดียวกัน แล้วค่าที่ใช้จะเป็นตัวไหนกันแน่ คำตอบคือ จะใช้ค่าที่ระบุโดย -classpath หรือ -cp option ของคำสั่งจาวาก่อนเสมอ แบบนี้ทำให้เราสามารถระบุค่าของ class path สำหรับโปรแกรมเราได้ โดยไม่ต้องห่วงว่า CLASSPATH environment variable มีการกำหนดไว้หรือไม่