Apache Maven คือเครื่องมือจัดการโปรเจกต์ ( Project Management Tool ) ที่ได้รับความนิยมสูงสุดในโลกของ Java โดยใช้แนวคิด POM ( Project Object Model ) เพื่อช่วยในการสร้าง ( Build ), จัดการไลบรารี ( Dependency ), และวางมาตรฐานโครงสร้างโปรเจกต์ให้เป็นระบบเดียวกัน
ทำความรู้จักกับไฟล์ pom.xml
หัวใจสำคัญของ Maven คือไฟล์ pom.xml ซึ่งเป็นไฟล์ที่ใช้เก็บรายละเอียดของโปรเจกต์ทั้งหมด เช่น
- Coordinates: ระบุตัวตนของโปรเจกต์ด้วย
groupId,artifactId, และversion - Dependencies: รายชื่อไลบรารีภายนอกที่ต้องใช้
- Plugins: เครื่องมือเสริมสำหรับขั้นตอนการ Build เช่น การสร้างไฟล์ .jar หรือการทำ Unit Test
โครงสร้างโฟลเดอร์มาตรฐาน ( Standard Directory Layout )
Maven บังคับใช้โครงสร้างโฟลเดอร์ที่เป็นมาตรฐานเดียวกันทั่วโลก เพื่อให้ Developer คนอื่นสามารถเข้าใจโปรเจกต์ได้ทันที
src/main/java: เก็บ Source Code หลักของภาษา Javasrc/main/resources: เก็บไฟล์ตั้งค่าต่างๆ ( เช่น .xml, .properties )src/test/java: เก็บไฟล์สำหรับการทำ Unit Testtarget: โฟลเดอร์ที่ระบบสร้างขึ้นเพื่อเก็บไฟล์ที่ Build เสร็จแล้ว ( เช่น .class หรือ .jar )
คำสั่งพื้นฐานที่ต้องรู้ ( Maven Lifecycle )
การสั่งงาน Maven มักจะทำผ่าน Command Line โดยมีวงจรชีวิต ( Lifecycle ) ที่สำคัญดังนี้
| คำสั่ง | หน้าที่ |
mvn clean | ลบโฟลเดอร์ target เพื่อล้างไฟล์เก่าทิ้ง |
mvn compile | Compile Code จากไฟล์ .java เป็น .class |
mvn test | รัน Unit Test ทั้งหมดในโปรเจกต์ |
mvn package | รวบรวมไฟล์ทั้งหมดออกมาเป็นไฟล์ที่พร้อมใช้งาน (เช่น .jar หรือ .war) |
mvn install | นำไฟล์ที่ Build เสร็จไปเก็บไว้ใน Local Repository ของเครื่องเราเอง |
การจัดการ Dependency
ข้อดีที่สุดของ Maven คือเราไม่ต้องไปไล่ดาวน์โหลดไฟล์ .jar มาวางในโปรเจกต์เอง เพียงแค่ระบุ code ใน pom.xml ดังนี้
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>6.1.0</version>
</dependency>
</dependencies>
Maven จะไปดาวน์โหลดไลบรารีจาก Maven Central Repository มาให้โดยอัตโนมัติ พร้อมกับจัดการไลบรารีอื่น ๆ ที่เกี่ยวข้อง ( Transitive Dependencies ) ให้ด้วย
ทำไมต้องใช้ Maven ?
- ประหยัดเวลา: ไม่ต้องกังวลเรื่องการจัดการ Version ของ Library ที่ขัดกัน
- มาตรฐานเดียวกัน: ทุกโปรเจกต์ที่ใช้ Maven จะมีโครงสร้างเหมือนกัน ทำให้รับช่วงต่อได้ง่าย
- Automation: สามารถทำงานร่วมกับเครื่องมือ CI/CD ( เช่น Jenkins, GitHub Actions ) ได้อย่างไร้รอยต่อ
สรุป
Maven ไม่ใช่แค่เครื่องมือดาวน์โหลดไลบรารี แต่เป็นเฟรมเวิร์กในการคุมมาตรฐานการพัฒนาซอฟต์แวร์ ช่วยให้ Developer โฟกัสไปที่การเขียน Code มากกว่าการมานั่งแก้ปัญหาเรื่องการตั้งค่าสภาพแวดล้อม ( Environment )
อ่านเพิ่มเติม