[သင္ခန္းစာ – ၁၂] class path ကုိ နားလည္ၿခင္း

[သင္ခန္းစာ - ၁၂] class path ကုိ နားလည္ၿခင္း

ဒီသင္ခန္းစာမွာေတာ့ class path အေၾကာင္းကုိ ရွင္းၿပသြားမွာပါ။

Class path ကုိ နားလည္တယ္ဆုိရင္ အၿခား programmer ေတြ create လုပ္ထားတဲ့ class တစ္ခုကုိ အသံုးၿပဳဖုိ့ ၾကိဳတင္ၿပင္ဆင္မွုေတြ ၿပဳလုပ္ႏုိင္မွာပါ။

ကုိယ္ကိုယ္တိုင္programming ကုိ မေရးပဲဲနဲ့လည္း software ေကာင္းတစ္ခုကုိ develop လုပ္ႏုိင္ပါတယ္။အေၾကာင္းၿပခ်က္ကေတာ့ class မ်ားကုိ အသံုးၿပဳခ်င္းအတြက္ အက်ဳိးေက်းဇူးကုိ ခံစားရမွာပါ။(ဒါမွမဟုတ္ အဆင္ေၿပတယ္လုိ့ ထင္ၾကမွာပါ။)

အဲဒါေၾကာင့္ sample program အတြက္ စီစဥ္ ထားပါတယ္။
ClassPathTest.java နဲ့ ClassPathTest2.java ဆုိၿပီး ႏွစ္ခု ရွိပါတယ္။

ClassPathTest.java

public class ClassPathTest

{

    public static void main(String[] args)

    {

        ClassPathTest2 hoge2 = new ClassPathTest2();

    }

}

ClassPathTest2.java

public class ClassPathTest2

{

    public ClassPathTest2()

    {

        System.out.println("ClassPathTest2() is called.");

    }

}

အခုေတြ ့ရတဲ့ အတုိင္း ဒီ program မွာ ClassPathTest class မွ ClassPathTest2 class ရဲ့ instance တစ္ခုကုိသာ ၿပဳလုပ္ပါတယ္။

အခုက အရမ္းကုိ ရုိးရွင္းတဲ့ program တစ္ခု ၿဖစ္ပါတယ္။

ပထမဆံုး folder တစ္ခုထဲမွာ file ႏွစ္ခုကုိ ထည့္လုိက္ပါ။ ၿပီးေတာ့ compile လုပ္ၿပီး execute လုပ္ေပးပါ။

messagedisplay5

ေမ်ွာ္လင့္ထားတဲ့ အတုိင္း Screen မွာ “ClassPathTest2() is called” ဆုိတဲ့ စာသားကုိ ၿပပါလိမ့္မယ္။ၿပီးေတာ့ လက္ရွိ folder ရဲ့ေအာက္မွာ အၿခား folder တစ္ခုကုိ create လုပ္လုိက္ပါ။ၿပီးရင္ ClassPathTest2 ရဲ့ class file နဲ့ source file ကုိ ဒီfolder ထဲကုိ ေရြ ့လုိက္ပါ။(အဲလုိေရြ ့တဲ့အခါ Explorer ကုိသံုးၿပီးေရြ ့ေပးရပါမယ္။)

အဲဒီ့ေနာက္မွာေတာ့ ClassPathTest.class ကုိ ထပ္ၿပီး execute လုပ္ေပးရပါမယ္။

messagedisplay6

အဲဒီ့အခါမွာ “ClassPathTest2 was not found” ဆုိတဲ့ Error message ကုိ ၿပပါလိမ့္မယ္။

Compile လုပ္ရင္ေရာအဆင္ေျပပါ့မလား။

messagedisplay7

messagedisplay8

Compile က fail ၿဖစ္ေနတာကိုေတြ႕ရမွာပါ။

ၿပသာနာက ClassPathTest2 class ကိုရွာလို႕မေတြ႕တာပဲျဖစ္ပါတယ္္။

အလားတူ error message ကုိ သင္ခန္းစာ ၁၀ မွာလည္းေတြ႕ခဲ့ဖူးပါတယ္။

ေၿပာရရင္ HDD(hard disk) ထဲမွာ ClassPathTest class ကအသံုးၿပဳထားတဲ့ ClassPathTest2 ကုိ Java Command နဲ့ Javac Command ႏွစ္ခုလံုးက မရွာေပးပါဘူး။ အဲဒီလုိမ်ဳိး ၿပဳလုပ္ရင္ အခ်ိန္တုိင္း instance အသစ္ကုိ create လုပ္ေပးျပီး HDD ကုိ access လုပ္ေပးရတဲ့အတြက္ လံုေလာက္တဲ့ လုပ္ေဆာင္ခ်က္ကုို မလုပ္ႏုိင္ပါဘူး ။

အဲဒါေၾကာင့္ user ကေန class file ရွာေပးႏိုင္ဖို႕ ေနရာတစ္ခုကုိ သတ္မွတ္ေပးဖုိ့ လုိအပ္ပါတယ္။

Class pathကုိ သတ္မွတ္ေပးဖုိ့ method ႏွစ္ခု ရွိပါတယ္။

ပထမ တစ္ခုကေတာ့ environment variable ကုိ အသံုးၿပဳတဲ့ method နဲ့ classpath option ကုိ အသံုးၿပဳတဲ့ method ပဲ ၿဖစ္ပါတယ္။

ဒီအခ်ိန္မွာ environment variable ကုိ အသံုးၿပဳတဲ့ method နဲ့ compile ထပ္လုပ္ၾကရေအာင္။

ဒီ environment variable ရဲ့ setting က “set” ဆုိတဲ့ command ကုိ ေအာက္ပါအတုိင္း အသံုးၿပဳပါတယ္။

messagedisplay9

ဒီ command က environment variable ၿဖစ္တဲ့ CLASSPATH ကုိ လက္ရွိ folder(.) နဲ့ လက္ရွိ folder ရဲ့ ေအာက္မွာ ရွိတဲ့ “another” folder အၿဖစ္ကုိ သတ္မွတ္ေပးပါတယ္။

လက္ရွိ folder ဆုိတာကုိ နားလည္ၾကရဲ့လား ?

လက္ရွိ folder ဆုိတာက အခု လက္ရွိ အလုပ္လုပ္ေနတဲ့ java class file ေတြရွိေနတဲ့folder ကုိပဲ ေၿပာတာ ၿဖစ္ပါတယ္။အခု အေၿခအေနမွာဆုိရင္ ClassPathTest.java ရွိေနတဲ့ folder ပဲၿဖစ္ပါတယ္။

ၿပီးရင္ေတာ့ ClassPathTest.java ကုိ compile လုပ္ၾကည့္ပါမယ္။

messagedisplay10

messagedisplay11

အခု မွန္မွန္ကန္ကန္နဲ့ အလုပ္လုပ္ေနတာကိုေတြ ့ရမွာပါ။

Javadoc command က Class path အေနနဲ့ “other” setting အားၿဖင့္ အၿခား folder ေအာက္မွာ ClassPathTest2.class ကုိ ရွာဖုိ့ ၿဖစ္ႏုိင္မယ္ ထင္ပါတယ္။

ၿပီေတာ့ အဲဒါဆုိ ပုံမွန္လုပ္ေဆာင္ႏုိင္ပါ့မလား ?

messagedisplay12

လက္ေတြ ့စမ္းသပ္မႈမွာလည္း ေအာင္ၿမင္သြားပါၿပီ။ Class ထဲမွာ ထည့္ဖုိ့ folder အမ်ားၾကီးကုိ ပုိင္းလုိက္တဲ့အခါ class path အားလံုးကုိ သတ္မွတ္ေပးရပါမယ္။

အဲလုိ အခက္အခဲၿဖစ္ေစတဲ့ အရာကုိ မလုပ္ခ်င္ရင္ေတာင္ အားလံုးကုိ folder တစ္ခုထဲမွာ ထည့္ေပးႏုိင္ပါတယ္။

အဲလုိ ၿပဳလုပ္ေပးမယ္ဆုိရင္ အခက္ျဖစ္ ေစတဲ့အရာေတြကုိ ၿပဳလုပ္ေပးစရာ မလုိေတာ့ဘဲ စနစ္တက် ဖဲြ ့စည္းဖုိ ့အတြက္ ခြဲၿခားဖုိ ့ အမွန္တကယ္ အဆင္ေၿပေစမွာပါ။

အခု class file တစ္ခုႏွစ္ခုသာရွိတယ္ဆိုေပမဲ့ တကယ့္ software မွာဆုိရင္ေတာ့ class file ၁၀ခု ဒါမွမဟုတ္ ၂၀ ေလာက္ create လုပ္ဖုိ့လုိပါတယ္။ အၿခား software က အသံုးၿပဳတဲ့ Common external library လုိမ်ဳိး class ကုိ လုိခ်င္တယ္ဆုိရင္ေတာ့ အဖြဲ့အစည္းအတြက္ ထည့္ေပးဖုိ့  directory ကုိ ခြဲၿခားေပးတာက ပုိေကာင္းပါတယ္။

အခု လက္ေတြ့ နည္းနည္းလုပ္ၾကည့္ရေအာင္။

“another2”ဆုိတဲ့ folder နဲ့ “ClassPathTest2.java” ဆုိတဲ့ fileကုိ ၿပဳလုပ္ေပးပါ။(file နာမည္တူတာ တစ္ခုကုိလည္း “another”ဆိုတဲ့ folder ေအာက္မွာ ထည့္ေပးပါ။)

ClassPathTest2.java ကုိ ေအာက္ပါအတုိင္းျမင္ေတြ ့ရပါလိမ့္မယ္။

public class ClassPathTest2

{

    public ClassPathTest2()

    {

        System.out.println("ClassPathTest2() is called.");

        System.out.println("This class is in another2.");

    }

}

ClassPathTest2.java ထဲကုိ message တစ္ခု ထည့္ေပးလုိက္ပါမယ္။

ၿပီးေတာ့ compile လုပ္ေပးပါ။

messagedisplay13

တစ္ဆက္ထည္း ClassPathTest class ကုိလည္း execute လုပ္ေပးၾကပါစုိ့။

messagedisplay14

ေအာက္မွာၿပထားတဲ့ CLASSPATH environment variable ကုိ ေၿပာင္းၿပီး ClassPathTest class ကုိ execute လုပ္ေပးလုိက္တဲ့ အခါ အဲဒါက ဘယ္လုိပိတ္သြားလဲဆုိတာ သိရမွာပါ။

messagedisplay15

အေၿဖေၿပာင္းသြားတာကုိ ေတြ ့ရမွာပါ။ ဒီလုိclass path ရဲ့ setting နဲ့ တူညီတဲ့ ClassPathTest class ရဲ့ အေၿဖကုိ ေၿပာင္းႏုိင္ပါတယ္။

Class setting အေနနဲ့ program ရဲ့ ေရြ့လ်ားမွုကုိ အမွန္ေတာ့ မေၿပာင္းႏုိင္ပါဘူး။ Environent variable နဲ့ class path option ကုိ ဂရုမစုိက္ရင္ အၿခား class က excutes လုပ္ရင္ အခက္အခဲ ရင္ဆုိင္ရပါလိမ့္မယ္။

ေနာက္ထပ္အေနနဲ့ classpath နဲ့ အစဥ္အတုိင္း အလားတူ ၿပသာနာၿဖစ္လာႏုိင္တဲ့အတြက္ ဂရုစိုက္ရမွာ ၿဖစ္ပါတယ္။

ေအာက္မွာရွိတဲ့ pattern ႏွစ္ခုၾကားမွာ မတူညီတဲ့ အခ်က္ေတြ ရွိပါတယ္။

[Pattern1]

messagedisplay16

[Pattern2]

messagedisplay17

“another” ဆုိတဲ့ folder ထဲမွာရွိတဲ့ ClassPathTest2 class ကုိ Pattern1 ကေခၚပါတယ္။

ဒါေပမယ့္ “another2” folder ထဲက ClassPathTest2 class ကေတာ့ Pattern2 ကေခၚပါတယ္။

တၿခားနည္း ေၿပာရရင္ class path တစ္ခုက ေပးထားတဲ့ priority ကုိ သတ္မွတ္ေပးထားပါတယ္။

….အက်ဥ္းခ်ဳပ္….

၁။ class path ေတြကုိ အသံုးၿပဳတဲ့အခါမွာ folder ေတြ အမ်ားၾကီးထဲက class ေတြကုိ အသံုးၿပဳလုိ့ရပါတယ္။

၂။ class path ကုိ design ဆြဲထားတဲ့ အစီအစဥ္အရ class ေတြကုိ execute လုပ္မယ့္ ဦးစားေပးလုိ့ရပါတယ္။

အခု class path ရဲ့ setting ကုိ ေလ့လာခဲ့ၾကပါတယ္။ ေနာက္တစ္ခါ package အေၾကာင္းကုိ ေလ့လာမွာ ၿဖစ္ပါတယ္။ Class path နဲ့ package ကုိ နားလည္ရင္ class file အေရအတြက္ကုိ အက်ဳိးရွိရွိ စီမံခန့္ခြဲႏုိင္မွာ ၿဖစ္ပါတယ္။

ၿပီးေတာ့ အၿခား programmer ေတြ create လုပ္ထားတဲ့ class ေတြကုိလည္း အက်ဳိးရွိရွိ အသံုးခ်ႏုိင္မွာ ၿဖစ္ပါတယ္။

ဒါေၾကာင့္မုိ့လုိ့ ေနာက္ထပ္ သင္ခန္းစာကုိ ေစာင့္ေမ်ွာ္ေပးၾကဖုိ့ ေမ်ွာ္လင့္ပါတယ္။

အဲဒါဆုိရင္ တကယ့္ Java Programming အစစ္ကုိ ၿပဳလုပ္ႏုိင္ၾကပါလိမ့္မယ္။

ေနာက္ထပ္ ထပ္ေတြ့ၾကမယ္ေနာ္။

ဆက္ရန္။ (သင္ခန္းစာ ၁၃) Package အေၾကာင္းနားလည္ေစရန္


Check our Facebook Page!