2012-12-03 60 views
7

मैं जावा संकलन के बारे में हुड के नीचे देखने की कोशिश कर रहा हूं। तो मैं अपने आईडीई दूर किया और MS-DOS कमांड लाइन का उपयोग शुरू किया ...जावा कंपाइलर क्लास फ़ाइलों को कैसे ढूंढता है जबकि क्लासपाथ jdk पथ पर सेट नहीं है?

मैं नीचे पेड़ में वर्णित के रूप में एक सरल प्रोजेक्ट बनाया,:

SampleApp

|____**src** 

     |_____pack 
       |______Sample.java 
|____**classes** 

यह Sample.java स्रोत कोड है:

public class Sample 
{ 

    private String s = new String("Hello, world"); 

    public Sample(){ 
      System.out.println(s); 
    } 
} 

मैं सिर्फ इस वर्ग के संकलन करना चाहते हैं, तो मैं javac आदेश का प्रयोग किया:

prompt\SampleApp\src>javac -d ..\classes -sourcepath . pack\Sample.java 

सभी ठीक काम करते हैं, लेकिन मुझे इसकी उम्मीद नहीं थी क्योंकि मैंने अपनी नमूना.जावा फ़ाइल को संकलित करने से पहले CLASSPATH पर्यावरण चर हटा दिया था। तो मैं इस तथ्य के कारण एक कंपाइलर त्रुटि की उम्मीद कर रहा था कि संकलक java.lang.String क्लास फ़ाइल नहीं ढूंढ पाएगा।

मैंने इस आलेख को http://www.ibm.com/developerworks/java/library/j-classpath-windows/ पढ़ा जिसने मुझे कई चीजों को समझने में मदद की। आलेख लेखक का कहना है कि डिफ़ॉल्ट क्लासपाथ वर्तमान कार्यशील निर्देशिका है। लेकिन मुझे समझ में नहीं आता कि मेरा स्रोत कोड बिना त्रुटि के संकलित क्यों है। क्या कोई मुझे यह समझा सकता है?

उत्तर

6

तो मैं इस तथ्य के कारण संकलन त्रुटि की उम्मीद कर रहा था कि संकलक java.lang.String क्लास फ़ाइल नहीं ढूंढ पाएगा।

संक्षिप्त उत्तर है कि संकलक जानता है, जहां आप इसे बताए बिना मानक जावा SE पुस्तकालय वर्गों के सभी मिल रहा है।

लंबा उत्तर यह है कि String कक्षा बूटक्लासपैथ पर मिल रही है। यह javac कमांड द्वारा जेडीके स्थापना में प्रासंगिक JARs को संदर्भित करने के लिए सेट किया गया है। javac कमांड नियमित क्लासपाथ पर सामान ढूंढने से पहले बूटक्लासपैथ की खोज करता है।

+0

आपके उत्तर के लिए धन्यवाद। यह वास्तव में मेरी मदद करता है! मैं bootclasspath के बारे में और जानकारी के लिए देखता हूँ। –

5

क्लासपाथ वेरिएबल जो भी आपको लगता है वह नहीं करता है। ओरेकल प्रलेखन का हवाला देते हैं करने के लिए:

CLASSPATH चर एक ही रास्ता JDK उपकरण, उपयोगकर्ता कक्षाओं के लिए देखने के लिए जहां सहित अनुप्रयोगों, बताने के लिए है। (कक्षा कि JRE, JDK मंच का हिस्सा हैं, और एक्सटेंशन ऐसे बूटस्ट्रैप वर्ग पथ या एक्सटेंशन निर्देशिका के रूप में, अन्य साधनों के माध्यम से परिभाषित किया जाना चाहिए।)

स्रोत: http://docs.oracle.com/javase/tutorial/essential/environment/paths.html

मूल रूप से के बाद से java.lang.* मंच का हिस्सा है और जेडीके/जेआरई के साथ दिया गया है, संकलक को आपको उनसे कहने के लिए कहने की ज़रूरत नहीं है।

+0

आपके उत्तर के लिए धन्यवाद। चीजें अब स्पष्ट हैं। –