สลับเวอร์ชัน Java JDK ขั้นเทพ ด้วย jenv (Linux / OS X)
เชื่อว่าหลายๆคนน่าจะเคยตกอยู่ในสถาณการณ์ที่ต้องลง Java JDK หลายเวอร์ชันไว้ในเครื่องตัวเอง แล้วเวลาจะสลับเวอร์ชันทีก็ต้องมานั่งตั้งค่า JAVA_HOME กันใหม่ ทุกครั้งที่จะตั้งค่า ก็ลืมทั้งคำสั่งที่ใช้ตั้ง และลืมพาร์ทของ JDK ว่าลงไว้ส่วนไหนของเครื่อง บางคนอาจใช้วิธีสร้าง bash file ไว้เพื่อการนี้
โชคดี! ถ้าหากว่า npm นั้นมี nvm ฝั่ง Java ก็มี jenv เช่นกัน! พ๊ามมผ่ามม :)
เปิดเว็บเพจของ jenv ขึ้นมา ก็จะพบ installation ที่สุดแสนจะง่าย ทำตามขั้นตอนที่ช่วยแปลไว้ด้านล่างนี้ก็ได้ let’s go!
Installation
Linux / OS X
$ git clone https://github.com/gcuisinier/jenv.git ~/.jenv
หรือ Homebrew (Mac OS X)
$ brew install jenv
แก้ installation issue
สำหรับผมที่ลงด้วย homebrew
แล้วพบว่ามีปัญหานิดหน่อย ลองสามาถตรวจสอบได้โดยการเช็คว่ามีโพลเดอร์ .jenv
สร้างขึ้นมาในโปรไฟล์เราไหม
$ jenv versions# output
* system (set by /Users/chakkapanr/.jenv/version)
สังเกตเอ๊าท์พุทที่ได้ จะเป็นพาร์ทไปยังโฟลเดอร์ที่ jenv
จะใช้ทำงาน /Users/chakkapanr/.jenv/version
ผมพบว่า homebrew
ไม่สร้างโพลเดอร์นี้ให้อัติโนมัติ ถ้าใครเป็นเหมือนกันให้ทำการสร้างโฟลเดอร์นี้ด้วยตัวเองดังนี้เลยครับ
mkdir ~/.jenv
mkdir ~/.jenv/versions
และต้องแก้ไข environment variable กับ .bask_profile
ด้วยนิดหน่อย (สรุปแทบจะเหมือน manual installation เลย homebrew
ไม่ได้ช่วยอะไร - -")
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(jenv init -)"' >> ~/.bash_profile
แก้ .bash_profile
แล้ว restart terminal 1 ทีนะครับ
(หรือรันคำสั่ง $ source ~/.bash_profile
ก็ได้)
Configuration
อันดับถัดไป เรามาเพิ่มเวอร์ชั่น JDK ที่เครื่องเรามีให้ jenv
รู้จักกันก่อนเลย ใช้ java_home
เพื่อนลิสท์ JDK ทั้งหมดที่เราลงไว้ในเครื่อง
$ /usr/libexec/java_home -V# outputMatching Java Virtual Machines (2):10.0.2, x86_64:
"Java SE 10.0.2"
/Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home 1.8.0_181, x86_64:
"Java SE 8"
/Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home
ตัวอย่างของผมมี 2 เวอร์ชัน ทำหารเพิ่มทั้ง 2 เวอร์ชันนี้ให้ jenv
รู้จัก
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jdk/Contents/Home # resultoracle64-1.8.0.181 added
1.8.0.181 added
1.8 added$ jenv add /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home# resultoracle64-10.0.2 added
10.0.2 added
10.0 added
ตรวจสอบด้วย jenv version อีกครั้ง
$ jenv versions
* system (set by /Users/chakkapanr/.jenv/version)
1.8
1.8.0.181
10.0
10.0.2
oracle64-1.8.0.181
oracle64-10.0.2
เซ็ตอัพเสร็จแล้ว ขั้นต่อก็เลือกเปลี่ยน JDK เวอร์ชันได้ตลอดเวลาด้วยความง่ายดายแล้ว
How to switch version
jenv
นำเสนอวิธีมาให้ 3 วิธี
1) เปลี่ยน global setting
เป็นการเซ็ต JDK version ของทั้งเครื่อง — java จะใช้เวอร์ชันนี้ (ถ้า directory นั้น หรือ shell นั้นไม่ได้ override global setting ไว้)
$ jenv global 1.8
ตรวจสอบ
$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)$ jenv versionssystem
* 1.8 (set by /Users/chakkapanr/.jenv/version)
1.8.0.181
10.0
10.0.2
oracle64-1.8.0.181
oracle64-10.0.2
บันทัด * เป็นการบอกว่า ไฟล์ที่ระบุ global setting ว่าใช้ version อะไรอยู่ที่นั่น
2) เปลี่ยน local setting (per directory)
เป็นการเซ็ต JDK version ใน ไดเร็คโทรี่นั้นเท่านั้น
$ jenv local 10.0
ตรวจสอบ
$ java -versionjava version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode) $ jenv versionssystem 1.8
1.8.0.181
* 10.0 (set by /Users/chakkapanr/.java-version)
10.0.2
oracle64-1.8.0.181
oracle64-10.0.2
บันทัด * เป็นการบอกว่า ไฟล์ที่ระบุ local setting ว่าใช้ version อะไรอยู่ที่นั่น
ข้อควรระวัง
: local setting จะทับ global setting เสมอ ที่กำลังทำงานแล้วคาดหวังว่าจะใช้ global setting แต่ปรากฏว่าไม่ได้เวอร์ชั่นที่เช็คไว้ ให้ลองรันคำสั่ง jenv versions
ดู เพื่อเช็คว่าโฟลเดอร์ปัจจุบันโดนทับด้วย local setting หรือเปล่า
3) เปลี่ยน เฉพาะ shell ปัจจุบัน
เป็นการเซ็ต JDK version ใน shell ปัจจุบันเท่านั้น
$ jenv shell 1.8
ตรวจสอบ
$ java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)$ jenv versionssystem
* 1.8 (set by JENV_VERSION environment variable)
1.8.0.181
10.0
10.0.2
oracle64-1.8.0.181
oracle64-10.0.2
บันทัด * เป็นการบอกว่า ไฟล์ที่ระบุ shell setting ว่าใช้ version อะไรอยู่ที่ JENV_VERSION
variable ซึ่งค่านี้จะหายไปเมื่อปิด shell ปัจจุบันนี้
happy coding :)
Originally published at buggy.birdbyrd.com on August 30, 2018.