[Java] รู้จัก Maven ให้มากขึ้น เพื่อก้าวสู่ java professional

          ถึงวันนี้คงไม่มี java dev คนไหนไม่ยอมใช้ maven กันอีกแล้ว แต่คงต้องอธิบายกันหน่อยเผื่อบางท่านมาจากภาษาอื่น ไม่ว่ากันครับ :D

maven คือ ??

          maven เป็น build tool ที่มีคลัง java source code หรือเรียกอีกอย่างว่า dependency เป็นของตัวเองอย่าง maven repository (https://mvnrepository.com/) ซึ่งประกอบด้วย library, plugin, archetype ให้เลือกใช้มากมาย ซึ่ง editor ส่วนใหญ่ก็รองรับกันอยู่แล้ว บางตัวก็มีติดมาในตัวเลย ไม่ต้องติดตั้ง maven เองเพิ่ม แต่ผมก็แนะนำให้ download แยกต่างหากนะ

ตัวอย่างโครงสร้าง maven project บน IntelliJ IDEA
*.idea, *.iml เป็นไฟล์เฉพาะของ IntelliJ project ไม่ต้องสนใจ 
          pom.xml คือ ส่วนสำคัญที่สุดของ maven project เราจะต้องระบุการเรียกใช้งาน dependency, plugin จะถูกเขียนไว้ที่ไฟล์นี้ ในรูปแบบ xml

ตัวอย่าง pom.xml
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemalocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelversion>4.0.0</modelversion>

    <groupid>th.in.lordgift</groupid>
    <artifactid>DemoMaven</artifactid>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--

        <dependency>
            <groupid></groupId>
            <artifactid></artifactId>
            <version></version>
        </dependency>

        ...

        -->

    </dependencies>

</project>
สังเกตว่า maven จะ ใช้ attribute 3 ค่านี้เสมอ
  • groupId คือ ชื่อ package ควรใช้ตัวอักษรตัวเล็กทั้งหมด เช่น th.in.lordgft
  • artifactId คือ ชื่อ project เช่น DemoMaven
  • version คือ version สำหรับ build สามารถใช้อักขระร่วมกับตัวเลขได้ เช่น 1.0-SNAPSHOT
          ซึ่งไม่ว่าจะเป็นการสร้าง maven project หรือการ download dependency จำเป็นต้องระบุ attribute ให้ถูกและครบด้วย ไม่งั้น maven อาจดึงของมาให้เราผิด

การใช้งาน maven ผ่าน command-line

          Apache Maven สามารถ download ได้ฟรี หลังจากติดตั้งทดลองใช้คำสั่งบน cmd / terminal
mvn --version

          การใช้งานต้อง change directory (cd) ไปที่ root ของ maven project ก่อน จากนั้นจะสามารถใช้งานคำสั่งต่าง ๆ ได้ เช่น
mvn clean
mvn package
mvn install
          หรือจะรวมและสั่งทีเดียว
mvn clean package

          แต่บางครั้ง dependency ที่เราดึงมาก็อาจดึง dependency อื่นต่ออีกทีนึง เมื่อไรเลือกใช้ library จำนวนมาก ก็อาจจะต้องตรวจสอบกันหน่อย
mvn dependency:tree
[INFO] +- org.springframework.boot:spring-boot-starter:jar:2.0.0.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot:jar:2.0.0.RELEASE:compile
[INFO] |  |  \- org.springframework:spring-context:jar:5.0.4.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-autoconfigure:jar:2.0.0.RELEASE:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-logging:jar:2.0.0.RELEASE:compile

.....

Build tool & Dependency

          ในส่วนของ maven อาจสร้างความกำกวมให้เล็กน้อย เพราะตัวมันเบ็ดเสร็จในตัวเอง
  • Build tool เป็นเครื่องมือในการ build project (ไม่ใช่ compiler นะ) ตัวอย่างเช่น gradle, ant เป็นต้น 
  • Dependency เป็นการดึงเอา source code มาจาก repository ซึ่งในปัจจุบันก็มี repository มากมาย ทั้ง maven เอง (java), jCenter (java), cocoapods (xcode project) หรือในองค์กรก็อาจทำ repository ขึ้นมาเฉพาะก็มี

          ถึงแม้ว่าปัจจุบัน gradle จะมาแรง และมีผู้ใช้บ้างแล้ว แต่ถ้าสังเกตดี ๆ การเรียกใช้งาน repository ก็จะชี้ไปที่ maven central อยู่นะ
//build.gradle
group 'th.in.lordgift'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}
          แอบแถมของมาให้นิดหน่อย build.gradle เปรียบเสมือน pom.xml แต่เป็นของ Gradle project ดู ๆ ซึ่งดูดีกว่า xml เยอะ ภาษาที่ build.gradle ใช้คือ groovy ซึ่งมาฐานมาจาก java แต่ถึงอย่างนั้นก็ไม่จำเป็นจะต้องศึกษา groovy เพื่อเขียน build.gradle ก็ได้ครับ


Facebook Comment

Recent Posts

Popular post of 7 days

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

Port Forwarding สำหรับคนใช้ AIS Fibre

Popular

Portal คืออะไรกันนะ???

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

มาตรฐานการตั้งชื่อตัวแปร (Naming Convention)

เรื่องของ ++i กับ i++

Port Forwarding สำหรับคนใช้ AIS Fibre

วิธีการสมัคร Apple Developer Program และ Enterprise Program ฉบับลงมือเอง

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

ทดสอบ Mobile App แบบ Automated ด้วย Appium ทำยังไงกันนะ

Deeplink, Universal Links คืออะไร ทำงานร่วมกับ Mobile App ได้ยังไง

Android Auto & Apple Carplay คืออะไร ใช้งานยังไง