หลายครั้งที่ไปแบ่งปันเรื่องต่าง ๆ เกี่ยวกับการพัฒนาระบบงานด้วยภาษา 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 กันอย่างไร ? ตัวอย่างการใช้งาน [code] //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 [/code] สิ่งที่ได้ตามมาคือ สามารถใช้งานทั้งการ compile และ run ผ่าน command line ได้เลย พวก build tool ต่าง ๆ ก็ใช้งานค่าเหล่านี้ ทั้ง Apache Maven และ Gradle แบบที่ 2 สำหรับชาว Mac น่าจะต้องใช้กัน โดยใน MacOS จะมี /usr/libexec/java_home ให้ใช้งาน สำหรับจัดการ version ของ Java นั่นเอง การใช้งานก็ไม่ยากเลย [gist id="3ad3c81f5ebcd03d935c874b6a4157ba" file="1.txt"] แบบที่ 3 ใช้งาน jenv (Java Environment Management) สามารถใช้งานได้เหมือนกับ rbenv ของภาษา ruby เลย [gist id="3ad3c81f5ebcd03d935c874b6a4157ba" file="2.txt"] แบบที่ 4 ใช้ Docker Image มันไปเลยง่ายสุด ๆคำถาม วันนี้ Java Developer จัดการ version ของ Java หรือ JDK กันอย่างไร ?