كيفية تغيير إصدار Java (JDK) على macOS بدون صداع: دليل لمن سئم من الأخطاء
\n\nهل سبق لك أن حاولت تشغيل مشروع قديم على Java، وأصر على التعطل مع خطأ؟ أو العكس، بيئة التطوير الجديدة تتطلب JDK 17، بينما لديك JDK 8؟ إذا كنت تعمل على macOS، فبالتأكيد واجهت أن تبديل إصدار Java هو مهمة شاقة. يبدو أن الأمر java -version يعيش حياته الخاصة ولا يخضع لرغباتك.
على Stack Overflow، جمع سؤال "How to set or change the default Java (JDK) version on macOS?" آلاف المشاهدات ومئات التعليقات. يختلط الأمر على الناس في المسارات، وينسون JAVA_HOME، ويكسرون النظام عن طريق الخطأ. دعنا نفهم مرة واحدة وإلى الأبد: كيفية إدارة JDK على Mac، وما الأخطاء التي تتربص بالمبتدئين وكيفية تجنبها.
هذه المقالة ليست توثيقًا جافًا. سنخوض رحلة من الفوضى الكاملة إلى الفهم الواضح. هيا بنا!
\n\nلماذا تتعامل macOS مع 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 التي يعرفها النظام. إذا قمت بتثبيت JDK عبر Homebrew أو يدويًا، لكنه لا يظهر، فهذا يعني أنه موجود في مجلد خاطئ أو ليس له هيكل صحيح.
\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 (الصدفة الافتراضية على macOS من Catalina فصاعدًا)، قم بتحرير الملف ~/.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: