Maven คืออะไร
Maven เป็นเครื่องมือการบริหารจัดการโครงการซอฟต์แวร์ เอาง่ายๆก็เอาไว้จัดการ library ที่ใช้กับโปรเจคอันใหญ่โตมโหฬารของเรา ซึ่งเจ้า maven เนื่ยจะเข้ามาช่วยจดการควบคุม Library เช่นการจะเพิ่ม Library ลบ หรือแม้แต่จะแก้ไข (การจะเพิ่มเวอร์ชั่น หรือ ลดเวอร์ชั่น ของ Library) ก็สามารถทำได้ง่ายมาก โดยไม่ต้องไปตามหาโหลดไฟล์ Library จากเว็บ ต้องนำไฟล์นั้นมา Extract File ย้ายไฟล์เข้ามาในโปรเจค แล้วสุดท้ายยังต้องมากำหนด path file ให้โปรเจคของเรารู้จักว่าไฟล์อยู่ที่ไหน ซึ่งนั้นมันยุ่งยากซึ่งกว่าจะใช้งานได้ก็ใช้เวลาไปหลายนาที แต่ทำไมเรายังต้องใช้วิธีการแบบนั้นอยู่ละ ลองมาดูกันว่า maven มาช่วยเราได้อย่างไร
การ Setup Maven
สามารถทำได้ 2 แบบ *ต้องลง JDK version 1.5 ขึ้นไปก่อนนะคะ
- download Apache Maven มาแตกไฟล์ที่เครื่อง และ setup Environment ของ OS ก็สามารถใช้งานผ่านการรันคำสั่งใน Window Command Prompt ได้ (รายละเอียดยิบย่อยในการ Setup จะไม่ได้กล่าวถึงในนี้เน้อ)
2. ใช้งานผ่าน Plugin ของ IDE
- Eclipse จะมี plugin maven ชื่อ m2eclipse สามารถติดตั้งได้ผ่าน eclipse market place
- NetBeans ตั้งแต่ version 6.7 จะมี maven ติดมากับตัว IDE อยู่แล้ว
- IntelliJ IDEA จะมี maven ติดมากับตัว IDE อยู่แล้ว
การสร้าง Maven Project
ทำได้ 2 แบบ
- ผ่าน cmd ด้วยคำสั่ง mvn archetype:generate
- สร้างผ่าน IDE ทั้งหลาย
โดยจะมี Project Template (Archetype) เช่น webapp หรือ j2ee เป็นตัวเลือกให้เราในขั้นตอนการสร้างทั้ง 2 รูปแบบ
Maven Keywords ที่จำเป็นต้องรู้
- groupId : เป็นเหมือนชื่อ source code package hierarchyที่ปกติเราสร้างขึ้นมาเอง แต่ maven จะให้เราตั้งชื่อ groupId ในขั้นตอนการสร้าง project ตัวอย่างการตั้งค่า เช่น com.mycompany.app เป็นต้น
- artifactId : เป็นการตั้งชื่อ app ของเรา โดยต้องกำหนดเป็นค่า unique
- version : เป็นการตั้งค่า version ของ app เรา
- Dependency : เป็นการนำ concept DI (Dependency Injection) มาใช้งาน โดยเราอยากใช้งาน Library ไหน ก็จับฉีดเข้ามาใน Project ผ่านการ config pom.xml ได้เลยจ้า สามารถค้นหา Library Dependency ได้จาก Maven Central Repository ที่นี่เลย → https://mvnrepository.com/ เลือก version ของ Library ที่จะใช้ เขาก็มี dependency ให้ copy มาแปะใน pom.xml ได้เลยน๊า สะดวกสุดๆ
- Repository : เป็นเหมือนถังไว้เก็บ Library ต่างๆ โดย Maven จะมี Repository 3 ประเภท ได้แก่
- Local →ถัง Library ที่เก็บไว้ที่เครื่องคอมพิวเตอร์ของ developer โดย default จะเก็บไว้ที่ User Home Directory เช่น C:\Users\Dev\.m2 ซึ่งสามารถแก้ไขได้ที่ไฟล์ <maven_home>/conf/setting.xml
- Central → ถัง Library กลางที่เก็บอยู่บน internet ไว้สำหรับให้ developer สามารถดึงมาใช้งานผ่านการ config dependency ในไฟล์ pom.xml ได้
- Remote → ถัง Library กลางที่สร้างขึ้นมาโดยเฉพาะ เพื่อแชร์และใช้กันภายในองค์กร
Maven Build LifeCycle หลักๆ
เรียงลำดับตามขั้นตอนการทำงานมีดังนี้
- validate : เป็นขั้นตอนการตรวจสอบความถูกต้องของสิ่งที่ config ไว้ในไฟล์ pom.xml นั่นเอง
- compile : เป็นขั้นตอนการ load Library ตามที่อ่านค่า config จาก pom.xml มาเก็บไว้ที่ local repository แล้ว compile source code ต่างๆให้เป็น binary class เมื่อ compile สำเร็จจะสร้างเป็น folder อยู่ภายใต้ src ชื่อ target สำหรับเก็บ binary class ที่ได้
- test : เป็นขั้นตอนการ Run Test Case ต่างๆ
- package : เป็นขั้นตอนการ pack binary source code ให้อยู่ในรูป jar/war/ear เก็บไว้ที่ folder target
- install : เป็นขั้นตอนการนำ jar/war/ear ที่ได้ไปเก็บไว้ที่ local maven repository
- deploy : เป็นขั้นตอนการ deploy jar/war/ear ขึ้น Server
สรุปข้อดี Maven
- ติดตั้งง๊ายงาย แถมมี Project Template ให้เลือกเยอะแยะ สบายไปอี๊กกก
- มี Plugin ให้ใช้ใน IDE ตัวฮิตฮอตทั้งหลายได้ง่ายดายมาก ส่วนใหญ่พ่วงมาในตัวเลย
- ไม่ต้องคอย copy lib ไปมาให้ยุ่งยาก แถมอยากใช้ version ไหน หรือจะเปลี่ยน version ก็แค่แก้ pom.xml
- ไม่ต้องเอา lib มากมายไปกองไว้ที่ SCM Server ประหยัดพื้นที่ได้อีกเยอะ
- มี Maven Plugin ที่เป็น embedded web server อย่าง Tomcat หรือ Jetty ให้ config มาใช้งานผ่าน cmd ได้เลยไม่ต้องไป load server มาติดตั้งเองให้ยุ่งยาก เอามาใช้ตอนที่พัฒนาบนเครื่อง Developer เอง สะด๊วก สะดวก
คลิปอธิบายเข้มข้น