می خوام جاوا ۱۱ (OpenJDK) و با استفاده از command line روی fedora 30 نصب کنم. یک سری سوال دارم که به تدریج این جا خواهم نوشت و براشون دنبال جواب خواهم گشت.
یک روش نصب دیگه هم وجود داره، تو اون روش یک فایل tar.gz و دانلود و بعد extract می کنیم و ... برای اطلاعات بیشتر می تونی به این لینک بری.
از دستور
sudo dnf search jdk
شروع کردم. لیست جون داری نشون داد در نتیجه سعی می کنم لیست و به این شکل محدود ترش کنم:
dnf search jdk | grep 11 |grep x86
و نتیجه به این شکل می شه:
حالا سوال اینه که فرق اینا چیه و باید کدوم و نصب کنم. به نظر میاد باید این دو تا پکیج و نصب کنم.
java-11-openjdk.x86_64 : OpenJDK Runtime Environment 11 java-11-openjdk-devel.x86_64 : OpenJDK Development Environment 11
البته با این دستور:
sudo dnf install java-11-openjdk sudo dnf install java-11-openjdk-devel
این کار و نکن! پکیج های زیادی هستند که به openjdk ای که روی سیستم نصب هست وابسته اند. مثل libreoffice بهتره jdk ای که می خوای و نصب کنی و لینک ها رو به درستی برقرار کنی تا وقتی با command line کار می کنی به جاوایی که تو می خوای اشاره کنه. و اون هم سرجاش بمونه! به هر حال این دستور مقدمات پاک کردن و فراهم می کنه:
sudo dnf remove java-1.8.0-openjdk-headless-1:1.8.0.201.b09-6.fc30.x86_64
با اجرای این دستور متوجه می شی که چقدر از پکیج های مهم لینوکس و می خواد پاک کنه. پس دست نگه دار و مشکل و با استفاده از Linux Alternative System حل کن!
[ahmad@localhost java]$ which java /usr/bin/java [ahmad@localhost java]$ ll /usr/bin/java lrwxrwxrwx. 1 root root 22 Jul 19 14:02 /usr/bin/java -> /etc/alternatives/java [ahmad@localhost ~]$ ll /etc/alternatives/java lrwxrwxrwx. 1 root root 72 Jul 19 14:02 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-6.fc30.x86_64/jre/bin/java
حالا اگه بریم داخل این فولدر چی خواهیم دید؟
ahmad@localhost ~]$ cd /usr/lib/jvm [ahmad@localhost jvm]$ ls -la drwxr-xr-x. 5 root root 4096 Jul 19 14:02 java-11-openjdk-11.0.3.7-5.fc30.x86_64 drwxr-xr-x. 3 root root 4096 Apr 26 06:55 java-1.8.0-openjdk-1.8.0.201.b09-6.fc30.x86_64
روال مشابه ای و می شه برای دستور javac هم طی کرد.
شما PATH و ببین:
[ahmad@localhost java-11-openjdk-11.0.3.7-5.fc30.x86_64]$ echo $PATH /home/ahmad/.local/bin:/home/ahmad/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin
داخل usr/bin یک java هست که به etc/alternatives/ اشاره می کنه. از طرفی با استفاده از دستور زیر می تونیم بگیم اونی که توی etc/alternatives/ هست به کجا اشاره کنه. در نتیجه بدون این که نیاز باشه یک ورژن و پاک کنیم می تونیم همون و داشته باشیم ولی بگیم java ای که داخل usr/bin/ هست در نهایت از کدوم جاوا استفاده کنه:
sudo update-alternatives --config java
از بخش بالا می تونیم ۲ رو انتخاب کنیم تا java نسخه ۱۱ به عنوان نسخه دیفالت انتخاب بشه. همین کار و برای دستور javac هم می شه چک کرد.
در نتیجه باید برای دستور های زیر نسخه ی مناسب و دریافت کنید:
java --version javac --version
تو بخش «چی به کجا لینک شده» تقریبا جایی که جاوا نصب شده رو پیدا کردم. اگر هر دو پکیج openjdk و openjdk-devel و نصب کنیم در نهایت ب همچین منظره ای مواجه می شیم:
به نظر میاد آنچه لازم داریم نصب شده. جاوا هم در داخل PATH هست. خب حالا بریم سراغ تنظیم JAVA_HOME.
نظر ها مختلفه ولی ما می ریم که JAVA_HOME و توی etc/profile/ تنظیم کنیم. جاهای دیگه ای هم هست که می شه این کار و کرد، تفاوتشون بماند برای بعد...
تا این جای قضیه می دونم که جاوا داخل این فولدر نصب شده:
usr/lib/jvm/java-11-openjdk-11.0.3.7-5.fc30.x86_64
بهتره بدونیم توی فولدر etc/alternatives/ چند تا لینک به این فولدر وجود داره:
به هر حال فایل etc/profile/ و برای ویرایش باز می کنم و این سطر و اضافه می کنم.
فایل و ذخیره می کنیم و می بندیم، برای اعمال تغییرات فوق هم می تونیم این دستور و بزنیم:
source /etc/profile
با این دستور می شه نتیجه نهایی کار و چک کرد: