macOS पर Java (JDK) वर्जन बदलना: गलतियों से बचने की आसान गाइड
\n\nक्या आपने कभी कोई पुराना Java प्रोजेक्ट चलाने की कोशिश की और वह एरर देकर बंद हो गया? या फिर नई IDE को JDK 17 चाहिए, जबकि आपके पास JDK 8 है? अगर आप macOS पर काम करते हैं, तो आपने महसूस किया होगा कि Java वर्जन बदलना एक मुश्किल काम है। लगता है जैसे java -version कमांड अपनी मर्जी से चलती है और आपकी बात नहीं सुनती।
Stack Overflow पर सवाल "How to set or change the default Java (JDK) version on macOS?" को हज़ारों बार देखा गया है और सैकड़ों कमेंट हैं। लोग पथों में उलझ जाते हैं, JAVA_HOME भूल जाते हैं और गलती से सिस्टम खराब कर देते हैं। आइए एक बार और हमेशा के लिए समझ लें: Mac पर JDK को कैसे मैनेज करें, शुरुआती कौन सी गलतियाँ करते हैं और उनसे कैसे बचें।
यह लेख कोई सूखी डॉक्यूमेंटेशन नहीं है। हम पूरी अव्यवस्था से स्पष्ट समझ तक का सफर तय करेंगे। चलिए शुरू करते हैं!
\n\nmacOS Java के साथ इतना "अजीब" व्यवहार क्यों करता है?
\n\nपहली बात समझ लें: macOS एक Unix-आधारित सिस्टम है, और यह पसंद नहीं करता जब आप मैन्युअली फ़ाइलों को गलत फ़ोल्डरों में डालते हैं। Apple डिफ़ॉल्ट रूप से JDK को /Library/Java/JavaVirtualMachines/ में इंस्टॉल करता है, और /usr/bin/java जैसी सिस्टम यूटिलिटीज़ सिर्फ रैपर हैं जो आपके JAVA_HOME को देखते हैं।
सबसे आम गलती है JDK फ़ोल्डर का नाम बदलना या उसे डिलीट करना। ऐसा बिल्कुल न करें! इसके बजाय, आपको सिम्बोलिक लिंक और एनवायरनमेंट वेरिएबल्स को मैनेज करना सीखना होगा।
\n\nचरण 1: जानें कि आपके पास कौन से JDK इंस्टॉल हैं
\n\nकुछ भी बदलने से पहले, देखते हैं कि आपके पास क्या है। टर्मिनल खोलें और यह कमांड चलाएँ:
\n\n/usr/libexec/java_home -V\n\nआपको कुछ इस तरह दिखेगा:
\n\nMatching Java Virtual Machines (3):\n 17.0.6 (x86_64) "Oracle Corporation" - "Java SE 17.0.6" /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home\n 11.0.18 (x86_64) "Oracle Corporation" - "Java SE 11.0.18" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home\n 1.8.0_361 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_361.jdk/Contents/Home\n\nयह उन सभी JDK की पूरी सूची है जिन्हें सिस्टम जानता है। अगर आपने Homebrew या मैन्युअली JDK इंस्टॉल किया है लेकिन वह यहाँ नहीं दिख रहा, तो इसका मतलब है कि वह सही फ़ोल्डर में नहीं है या उसकी संरचना सही नहीं है।
\n\nगलती #1: यह सोचना कि export JAVA_HOME हमेशा के लिए है
\n\nशुरुआती अक्सर टर्मिनल में लिखते हैं:
\n\nexport JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home\njava -version # 17 दिखाता है\n\nऔर खुश हो जाते हैं। लेकिन जैसे ही टर्मिनल बंद करके नया खोलते हैं, सब कुछ पुराने वर्जन पर वापस आ जाता है। क्यों? क्योंकि export सिर्फ मौजूदा सेशन में काम करता है।
समाधान: इस लाइन को अपने शेल कॉन्फ़िगरेशन फ़ाइल में जोड़ें। अगर आप zsh (Catalina और उससे नए macOS पर डिफ़ॉल्ट शेल) का उपयोग करते हैं, तो ~/.zshrc फ़ाइल को एडिट करें:
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 17)' >> ~/.zshrc\nsource ~/.zshrc\n\nअगर आप bash (पुराने macOS) का उपयोग करते हैं, तो फ़ाइल का नाम ~/.bash_profile है।
गलती #2: java और javac में भ्रम
\n\nआपने JAVA_HOME बदल दिया, java -version सही वर्जन दिखाता है, लेकिन javac -version अब भी पुराना वर्जन दिखाता है। परिचित लग रहा है?
ऐसा इसलिए होता है क्योंकि java और javac अलग-अलग एक्ज़ीक्यूटेबल फ़ाइलें हैं। कभी-कभी ये अलग-अलग JDK से आ सकती हैं। देखें कि ये कहाँ स्थित हैं:
which java # /usr/bin/java\nwhich javac # /usr/bin/javac\n\nअगर पथ समान हैं, तो समस्या यह है कि /usr/bin/java एक सिम्बोलिक लिंक है जो पुराने वर्जन की ओर इशारा कर सकता है। इसे java_home यूटिलिटी से अपडेट करें: