← Back to list

JENV บริหารจัดการ Multiple versions of JAVA on one Machine

ความวุ่นวายกับการต้องคอยมาจัดการสลับ สับเปลี่ยนเวอร์ชั่นของ Java ในเครื่องของคุณ ถ้าคุณมี Applications ที่ต้องใช้ Java ต่าง ๆ…

Poolsawat Apin · 2024-10-23 02:12 · 0 claps · 1.7 min read
#java #jdk #jenv #developer #tools
Open on Medium ↗

JENV บริหารจัดการ Multiple versions of JAVA on one Machine

ความวุ่นวายกับการต้องคอยมาจัดการสลับ สับเปลี่ยนเวอร์ชั่นของ Java ในเครื่องของคุณ ถ้าคุณมี Applications ที่ต้องใช้ Java ต่าง ๆ หลายเวอร์ชั่นเพื่อใช้ในการรันโค๊ดของคุณ จะพบกับการเรียกหา java compiler ที่ต่างเวอร์ชั่นกันเพราะ default java ของเครื่องกำหนดไว้ไม่ตรงกับโค๊ดของคุณที่กำลังต้องการสั่งให้โค๊ดของคุณทำงาน เช่น ปัจจุบันเครื่องของคุณกำหนด default java ไว้เป็น jdk 21 แต่โค๊ดของคุณกำลังเรียกหา jdk 11 เพื่อสั่งโค๊ดของคุณให้รัน คุณต้องหาทางสลับกำหนด default version ใหม่ให้เป็น jdk 11 ปัญหาเริ่มสะสม ผมว่าต้องมีคนหงุดหงิดแบบผมแน่ ๆ ทำไมไม่มีใครสักคนทำอะไรเพื่อมาแก้ปัญหาเหล่านี้เสียที

ขออ้างถึง NodeJS สักหน่อย

ผมเป็นคนที่ผมใช้ NodeJS เพื่อโค๊ดงาน เร่ง ๆ ไว ๆ ด่วน ๆ NodeJS ก็เป็นอีกภาษาที่มีความหลากหลายเรื่องเวอร์ชั่น NVM ที่เป็นสิ่งมาช่วยชีวิตเพื่อทำให้อะไร ๆ มันดูง่ายขึ้น พอกลับมามอง java ทำไมไม่มีแบบนี้บ้าง จนกระทั่ง…

JENV ไง เครื่องมือมาช่วยนักพัฒนาสาย JAVA

jEnv เป็นเครื่องมือที่มาช่วยบริหารจัดการ Java หลาย ๆ เวอร์ชั่นในเครื่องของคุณให้สลับสับเปลี่ยนได้ง่าย ๆ เพียงคำสั่งเดียว (JAVA_HOME ที่ต้องคอยมาสลับสับเปลี่ยนทุกครั้งที่อยากจะกำหนด default version จะไม่ต้องมาเปลี่ยนเองแล้ว)

JENV ติดตั้งและ ใช้งานอย่างไร

  1. ติดตั้งผ่าน homebrew หรือ Linux / OS X ก็ได้มี 2 ทางเลือก
// homebrew
$ brew install jenv

// Linux / OS X
$ git clone https://github.com/jenv/jenv.git ~/.jenv
  1. ตั้งค่า user profile (.zshrc) และ ติดตั้ง plugin
$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
$ eval "$(jenv init -)"
$ jenv enable-plugin export
$ exec $SHELL -l
  1. ติดตั้ง jdk 11, 17
$ brew install openjdk@11

$ brew install openjdk@17
  1. เพิ่ม jdk 11, 17 ให้ jenv
$ jenv add /opt/homebrew/opt/openjdk@11/libexec/openjdk.jdk/Contents/Home/

$ jenv add /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home/
  1. ตรวจสอบ เวอร์ชั่นทั้งหมดที่ jenv รู้จัก
$ jenv versions
system
  11
  11.0
  11.0.25
  17
  17.0
  17.0.13
* openjdk64-11.0.25 (set by /Users/poolsawat.api/.jenv/version)
  openjdk64-17.0.13
  1. กำหนด jenv default java แบบ global (jdk 11)
$ jenv global openjdk64-11.0.25

6.1 หรือจะกำหนดแบบ local ก็สามารถทำได้ (jenv จะทำการสร้าง .java-version ใน project และเมื่อ jenv เจอ .java-version ก็จะเลือกใช้ตาม version ที่กำหนด)

$ jenv local openjdk64-11.0.25
  1. ตรวจสอบ default java version ของเครื่อง ณ ปัจจุบัน
$ java -version

แต่ในข้างครั้งอาจจะเจอปัญว่ากำหนด jenv global แล้วแต่ ตรวจสอบ java -version ไม่เปลี่ยนตาม อาจจะเกิดจากปัญหาตั้งค่า jenv ที่ไม่สมบูรณ์ ให้ลองตรวจสอบ ด้วยคำสั่งนี้

$ jenv doctor

ถ้าเจอแบบนี้ [ERROR] แสดงว่า jenv ไม่พร้อมใช้งาน

[OK]    JAVA_HOME variable probably set by jenv PROMPT
[ERROR] Java binary in path is not in the jenv shims.
[ERROR] Please check your path, or try using /path/to/java/home is not a valid path to java installation.

ให้ทำการแก้ไขด้วยวิธีนี้ (เพิ่ม ใน user profile .zshrc)

$ vi ~/.zshrc

// append this line to .zshrc file
$ export PATH="$HOME/.jenv/shims:$PATH"

$ source ~/.zshrc

จากนั้นตรวจสอบ jenv doctor อีกครั้ง ถ้าได้แบบนี้แสดงว่าพร้อมใช้งาน

[OK]    JAVA_HOME variable probably set by jenv PROMPT
[OK]    Java binaries in path are jenv shims
[OK]    Jenv is correctly loaded

จากนั้นให้ลองตรวจสอบ java -version อีกครั้ง

$ java -version

openjdk version "11.0.25" 2024-10-15
OpenJDK Runtime Environment Homebrew (build 11.0.25+0)
OpenJDK 64-Bit Server VM Homebrew (build 11.0.25+0, mixed mode)

เป็นอันเรียบร้อย jenv ของเราสามารถทำงานได้แล้ว สวดยวดไปเลย บทความนี้ฝากไว้เท่านี้ครับผม


메타데이터
post_id
0812f8ced8fe
slug
jenv-บริหารจัดการ-multiple-versions-of-java-on-one-machine-0812f8ced8fe
url
https://medium.com/@poolsawat-com/jenv-%E0%B8%9A%E0%B8%A3%E0%B8%B4%E0%B8%AB%E0%B8%B2%E0%B8%A3%E0%B8%88%E0%B8%B1%E0%B8%94%E0%B8%81%E0%B8%B2%E0%B8%A3-multiple-versions-of-java-on-one-machine-0812f8ced8fe
canonical_url
https://medium.com/@poolsawat-com/jenv-%E0%B8%9A%E0%B8%A3%E0%B8%B4%E0%B8%AB%E0%B8%B2%E0%B8%A3%E0%B8%88%E0%B8%B1%E0%B8%94%E0%B8%81%E0%B8%B2%E0%B8%A3-multiple-versions-of-java-on-one-machine-0812f8ced8fe
author_url
https://medium.com/@poolsawat-com
status
ok
fetched_at
2026-07-22 10:58:37