หลายครั้งที่ไปแบ่งปันเรื่องต่าง ๆ เกี่ยวกับการพัฒนาระบบงานด้วยภาษา Java
สิ่งหนึ่งที่ต้องประหลาดใจคือ
หลาย ๆ คนไม่ได้กำหนดค่าของ JAVA_HOME
สามารถทำการ run ด้วยคำสั่ง java ได้
แต่ไม่สามารถ compile ด้วยคำสั่ง javac ได้
นั่นหมายความว่า
ในเครื่องมีแต่ JRE (Java Runtime Environment) แต่ไม่มี JDK (Java Development Kit)
หรือบางคนก็มี JDK นะแต่ run ไม่ได้
เนื่องจากทำการกำหนดไว้ใน IDE เท่านั้น แต่ไม่ได้กำหนด JAVA_HOME
หรือบางคนก็กำหนดนะ แต่กำหนดไว้ใน PATH ตรง ๆ เลย ไม่มีกำหนดใน JAVA_HOME

คำถามที่น่าสนใจคือ
ถ้ามี Java หรือ JDK หลาย ๆ version จะจัดการกันอย่างไร ?

ยังไม่พอนะ
Java หรือ JDK ที่ใช้ในงานนั้น แต่ละคนใช้ version เดียวกันหรือไม่ ?

ปล.
JAVA_HOME คือชื่อ environment variable ของระบบ
ใช้สำหรับกำหนด path ของการติดตั้ง JDK นั่นเอง

ดังนั้นลองมาแบ่งปันปันกันหน่อย ว่าจัดการ version ของ Java กันอย่างไร ?

แบบที่ 1 มากำหนดใน environment ชื่อ JAVA_HOME กัน
เป็นวิธีแบบพื้นฐานสุด ๆ
ถ้าใครไม่ทำจัดว่าแย่ใช้ได้เลย สำหรับ Java Developer นะ
บางคนอาจจะบอกว่า
ก็ใช้ IDE นะ มันก็ทำงานได้ !! อันนี้ไม่เถียงนะ
แต่ถ้าไม่มี IDE ละ จะทำงานกันอย่างไร ?
compile อย่างไร ?
run อย่างไร ?
packaging พวก JAR, WAR และ EAR กันอย่างไร ?

ตัวอย่างการใช้งาน

//Windows
set JAVA_HOME=<path ในการติดตั้ง JAVA>
set PATH=.;%JAVA_HOME%\bin;%PATH%

//Mac หรือ Linux
export JAVA_HOME=<path ในการติดตั้ง JAVA>
export PATH=.:$JAVA_HOME\bin:$PATH

สิ่งที่ได้ตามมาคือ
สามารถใช้งานทั้งการ compile และ run ผ่าน command line ได้เลย
พวก build tool ต่าง ๆ ก็ใช้งานค่าเหล่านี้ ทั้ง Apache Maven และ Gradle

แบบที่ 2 สำหรับชาว Mac น่าจะต้องใช้กัน
โดยใน MacOS จะมี /usr/libexec/java_home ให้ใช้งาน
สำหรับจัดการ version ของ Java นั่นเอง
การใช้งานก็ไม่ยากเลย

แบบที่ 3 ใช้งาน jenv (Java Environment Management)
สามารถใช้งานได้เหมือนกับ rbenv ของภาษา ruby เลย

แบบที่ 4 ใช้ Docker Image มันไปเลยง่ายสุด ๆ

คำถาม วันนี้ Java Developer จัดการ version ของ Java หรือ JDK กันอย่างไร ?

Tags: