ป้ายกำกับ: Tool

Java: Apache MavenJava: Apache Maven

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 หลักของภาษา Java
  • src/main/resources: เก็บไฟล์ตั้งค่าต่างๆ ( เช่น .xml, .properties )
  • src/test/java: เก็บไฟล์สำหรับการทำ Unit Test
  • target: โฟลเดอร์ที่ระบบสร้างขึ้นเพื่อเก็บไฟล์ที่ Build เสร็จแล้ว ( เช่น .class หรือ .jar )

คำสั่งพื้นฐานที่ต้องรู้ ( Maven Lifecycle )

การสั่งงาน Maven มักจะทำผ่าน Command Line โดยมีวงจรชีวิต ( Lifecycle ) ที่สำคัญดังนี้

คำสั่งหน้าที่
mvn cleanลบโฟลเดอร์ target เพื่อล้างไฟล์เก่าทิ้ง
mvn compileCompile 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 )


อ่านเพิ่มเติม