Last updated on July 12, 2015
คนทำงานกับ Java คงคุ้นเคยกับ *.jar (JAR – Java Archive) เป็นอย่างดีเพราะ application หรือ library ส่วนใหญ่มักจะถูกรวมมาแบบนี้เพื่อความสะดวกในการเอาไปใช้งานต่อ jar ไฟล์เดียวเอาไปใช้งานได้เลยไม่ต้องเอา folder หรือ config files อะไรไปอีกให้ยุ่งยาก
แล้วถ้าเราจะทำบ้างล่ะ ต้องทำยังไง?
ถ้าเป็น Eclipse project ผมเคยเขียนถึงไปแล้ว วิธีการยุ่งยากนิดหน่อย อาจต้องแก้โค้ดด้วย แต่ถ้าเป็น Maven project อาจจะใช้ command line ได้แต่ก็อาจจะยุ่งยาก แต่ก็มี IDE ที่เป็น Maven-based ให้ใช้นั่นคือ IntelliJ IDEA ครับถึงจะยังไม่เป็นที่นิยมเท่า Eclipse แต่ความสามารถไม่ต่างกันเลยนะ IDE ที่ใช้พัฒนาโปรแกรมก็ใช้ IDEA เป็นฐานในการพัฒนา เช่น Android Studio, PyCharm ใช้แรกๆ อาจจะงง flow การทำงานและ concept นิดหน่อยแต่ใช้ไปเรื่อยเดี๋ยวก็ชินเอง (แหงหละ)
concept ของ IDEA คือการตั้งค่า artifact ของ project ก่อนจากนั้นก็สั่ง build ก็จะได้ *.jar ออกมา ส่วนจะ export *.jar เพื่อเป็น library หรือ execute *.jar ก็แล้วแต่เราจะตั้งค่า artifact ครับ
ขั้นตอนการ export execute jar ของ IDEA ทำตามนี้ครับ
ตั้งค่า Project Structure
แถบเมนูข้างบนไปที่
File > Project Structure
+ > jar > From modules with dependencies…
ถ้าเคยตั้งค่ามาก่อนแล้วใช้ไม่ได้ จะลบออกก่อนก็ได้ครับ

พอคลิกที่เมนู From modules with dependencies จะเจอหน้าต่างให้เราเลือก Main class และ path manifest file สำหรับใช้ build ให้ตั้งค่าและเลือกตามรูปครับ

- ช่อง Main Class ให้เลือก Main class ที่เราต้องการให้มันทำงานเมื่อมีการรัน jar ที่เราจะสร้าง ถ้าหา Main class ที่เราต้องการไม่เจอต้องสั่งรัน Main class นั้นก่อน นะครับ
- เลือก extract to target jar
- เลือก path ที่อยู่ของ META-INF/MANIFEST.MF ปกติค่า default จะชี้ไปที่ package ที่ Main class ที่เราเลือกไว้ แต่เราจะเปลี่ยนไปเก็บไว้ที่ directory src/ แทนครับ และแนะนำว่าตอนเลือก path ให้กดที่ปุ่ม … ท้ายช่องแล้วค้นหาแทนการพิมพ์แก้ path ในช่อง
กดปุ่ม OK จะได้ตามรูปนี้

ตรวจสอบตามหมายเลข 1, 2, 3 ว่าได้คล้ายๆ แบบนี้หรือเปล่า
ช่องหมายเลข 1 ควรเป็นประเภท jar ส่วน output เมื่อ build แล้วจะให้ไปวางไว้ที่ไหนให้ดูที่ช่อง output directory
ช่องหมายเลข 2 ให้สังเกตว่าเป็น Extracted ….(ชื่อ jar ที่เป็น dependencies)… หรือเปล่า icon ข้างหน้าจะเป็น icon ลูกศรจากขวดชี้มาที่แฟ้มสีเหลือง
ช่องหมายเลข 3 ควรจะเป็น MANIFEST.MF และ Main class ที่เราเลือกไว้
เสร็จแล้วกดปุ่ม OK เพื่อปิดหน้าต่างครับ
Build Artifacts เพื่อ Export jar
ที่แถบเมนูข้างบน เลือก Build > Build Artifacts

จะปรากฎเมนูเล็กๆ กลางจอดังรูป ให้เลือก Build (หรือจะ Clean ก่อนก็ได้)

โปรแกรมก็จะ build project เมื่อ build เสร็จให้เข้าไปดูที่ directory ที่เราตั้งไว้ในช่อง output directory ในขั้นตอนที่แล้ว ถ้าไม่มีอะไรผิดพลาดจะเจอ *.jar ข้างใน จากนั้นลองใช้ terminal cd เข้าไปในไดเรกทอรีแล้วสั่งรันด้วยคำสั่ง
$java -jar application.jar
โปรแกรมก็จะทำงานตาม Main class ที่เราเขียนไว้ครับ