What is Maven?
เรามาทำความรู้จักMavenกันก่อน Maven นั้นเกิดในยุดของการสร้าง Web Application ด้วย Web Framework ในช่วงแรกๆ (Apache Turbine Web Application Framework) โดยสาเหตุหลักที่ทำให้เกิด Maven ขึ้นมาเพราะเมื่อก่อนเราจะใช้ Ant หรือ Build Script ที่เราสร้างขึ้นมาเอง ในการ build โปรเจคซึ่งสองสิ่งนี้มีความยืดหยุ่นสูงมากและในทางกลับกันพอเรามีโปรเจคมากขึ้น การใช้สองสิ่งนั้นมันดูยุ่งยากและจัดระเบียบในเรื่องต่างๆไม่ว่าจะเป็น Project Structure หรือ Library Management ได้ค่อนข้างยาก ผลคือทำให้เกิด Maven ขึ้นมาโดยที่มันเองก็เป็น build tool อีกตัวนึงที่สามารถทำในสิ่งที่ Antและ Build Script ทำได้ยากได้ ดังนั้น Mavenจึงเป็น build tools อีกตัวนึง ที่เอาไว้ใช้ build, compile, test, clean, deploy โปรเจคของเรา นอกจากนั้นMavenยังสามารถทำ dependency management,Javadoc ,siteและอื่นๆได้อีกด้วย มันจะทำให้การทำงานในโปรเจคของเราทำงานได้อย่างเป็นระเบียบ, ยืดหยุ่น โดย Maven จะมีไฟล์ config ของโปรเจคที่เป็น xml เพียงไฟล์เดียว ทำให้แก้ไขได้ง่าย และไม่รกต่อไฟล์ของโปรเจคเรา
ทำไมเราต้องใช้Maven, Problem?
ข้อดีของMavenมีมากมายก่ายกอง แต่ผมจะยกมาให้ดูเพื่อเห้นภาพซัก2ตัวอย่างว่าทำไมเราต้องใช้Maven
1. Maven จะมีStructure ของโปรเจคที่เป็น standard อันนี้เป็นข้อดีอย่างมาก ถ้าลองนึกภาพดู ถ้าเกิดเรามีโปรเจคซัก 6-7โปรเจค พอเวลาprogrammer จะเขียนโปรแกรมทีนึงแต่ละคนก็จะกำหนด structureของแต่ละคนทีนึง แล้วถ้ามีโปรเจคอยู่6-7 โปรเจค เท่ากับว่ามีstructureของโปรเจคทั้ง6-7แบบ
ปัญหา : ถ้าเราจะศึกษาโปรเจคนั้นเท่ากับว่าเราก็ต้องศึกษาstructure ทั้งหมดนะสิเหนื่อยตายพอดีครับ
ทางแก้ : Mavenเขาก็เลยกำหนดstandardขึ้นมาซะ ทำให้เราศึกษาแค่ตัวstandardของมันเพียงตัวเดียว เทากับว่าเราก็สามารถเข้าใจได้ในทุกๆโปรเจค
Standard directory organization
จากรูปด้านบนแสดงให้เห็นถึงเมื่อว่าเราทำงานในหลายๆ โปรเจคด้วยกัน แต่ละโปรเจคก็จะมีstructure เดียวกัน และแต่ละโปรเจคไฟล์configก็จะถูกเก็บไว้ไฟลืเดียวคือ pom.xml ทำให้ structure ของโปรเจคเรามีระเบียบมาก และถ้าเกิดrogrammerคนต่อไปมาพัฒนาต่อ ก็จะทำให้พัฒนาต่อได้โดยไม่ต้องมานั่งศึกษาstructureของโปรเจคต่ออีกมาก
2. Maven สามรถทำ Dependency management ได้ ทำให้programmer ไม่ต้องมาคุบควมdependencyที่จะเรียกมาใช้งาน
ปัญหา : ถ้ามีโปรเจคย่อยอยู่6-7โปรเจค แต่ละคนก็ใช้ dependency ของแต่ละคน เท่ากับว่าทุกโปรเจคต้องมาset pathของdependency ทุกโปรเจค
ทางแก้ : Maven จะมี repositoryที่รวบรวม dependencyไว้ให้บนinternetโดยเราไม่ต้องห่วงว่าจะใช้dependencyตัวนี้จะต้องโหลดที่ไหน เพียงเราแค่กำหนดชื่อ กับversionของdependencyที่เราจะใช้เข้าไป config ที่ pom.xml นอกนั้Maven จะจัดทำการเรียกหาdependencyให้เราเอง
Dependency management
เจ้าdependency management ตัวนี้หรอจะพูดได้อีกอย่างว่า ตัวจัดการlibraryให้เรานั้นเอง เราแค่กำหนดชื่อ และversionให้เท่านั้น ก็จะทำการเลือกหา dependency
จากรูปด้านบนแสดงให้เห็นถึงเมื่อว่าเราทำงานในหลายๆ โปรเจคด้วยกัน แต่ละโปรเจคก็จะมีstructure เดียวกัน และแต่ละโปรเจคไฟล์configก็จะถูกเก็บไว้ไฟลืเดียวคือ pom.xml ทำให้ structure ของโปรเจคเรามีระเบียบมาก และถ้าเกิดrogrammerคนต่อไปมาพัฒนาต่อ ก็จะทำให้พัฒนาต่อได้โดยไม่ต้องมานั่งศึกษาstructureของโปรเจคต่ออีกมาก
2. Maven สามรถทำ Dependency management ได้ ทำให้programmer ไม่ต้องมาคุบควมdependencyที่จะเรียกมาใช้งาน
ปัญหา : ถ้ามีโปรเจคย่อยอยู่6-7โปรเจค แต่ละคนก็ใช้ dependency ของแต่ละคน เท่ากับว่าทุกโปรเจคต้องมาset pathของdependency ทุกโปรเจค
ทางแก้ : Maven จะมี repositoryที่รวบรวม dependencyไว้ให้บนinternetโดยเราไม่ต้องห่วงว่าจะใช้dependencyตัวนี้จะต้องโหลดที่ไหน เพียงเราแค่กำหนดชื่อ กับversionของdependencyที่เราจะใช้เข้าไป config ที่ pom.xml นอกนั้Maven จะจัดทำการเรียกหาdependencyให้เราเอง
Dependency management
เจ้าdependency management ตัวนี้หรอจะพูดได้อีกอย่างว่า ตัวจัดการlibraryให้เรานั้นเอง เราแค่กำหนดชื่อ และversionให้เท่านั้น ก็จะทำการเลือกหา dpendencyมาให้เราใช้ในโปรเจคให้เราเอง
ในรูปนี้คือปัญหาของเราในการทำโปรเจค เพราะ แต่ละโปรเจคก็จะมีการเรียกใช้ depedency ที่ทั้งแตกต่างกันและซ้ำกัน โดยdepedencyที่ซ้ำกันไปเก็บไว้คนละที่กัน
เนื่องจากปัญหาดังรูปด้านบนที่ทำให้มีการเก็บdependencyที่เหมือนๆกันหลายที่โดยเจ้าmaven ก็เลยแก้ปัญหาโดยการสร้างที่เก็บกลาง หรือ local repository
ต่อจากภาพด้านบน เมื่อเราทำlocal repository หรือที่เป้นที่เก้บdependencyกลางนั้น แล้วเราจะเอาdependencyมาจากไหนละ?
คำตอบคือ Maven เตรียมให้เรียบร้อยแล้ว โดยเราจะทำการdownload dependencyที่เราจะใช้งานในinternet มาเก็บไว้ที่local repository นั้นเอง ถ้าสังเกตตอนใช้maven ครั้งแรกจะนานมากๆ เพราะต้องdownload dependency จากinternet มานั้นเอง
แล้วจากที่อ่านมาสงสัยรึเปล่าว่าทำไมในโปรเจคเราต้องใช้depedency ด้วยละ?
เนื่องจากJava นั้นมี libraryเป้นล้านแปด แล้วแต่ละตัวก็มีversionอีกมากมาย แล้วถ้าเราจะทำซักโปรเจคนึงเราต้องโหลดเจ้าlibraryเป็นล้านแปดมาหรอ? ฉะนั้นเราก็ต้องกำหนดเฉพาะที่จะใช้ในโปรเจคเท่านั้น
ทำไมใช้dependency แล้วต้องกำหนดversionด้วยละ?
อย่างที่ข้อด้านบนบอก library เองก็มีversionเยอะมากมายแล้ว ถ้าเกิดนายAใช้ version 1.2 แล้วนายAเกิดลาออกจากงานไป ทำให้นายBต่องมารับช่วงโปรเจคต่อ แล้วนายBไปใช้version 1.3 ละ คราวนี้ก็ซวยสิครับ ฉะนั้นเราจึงกำหนดversionให้มันอย่างละเอียดซะ จะได้ไม่เกิดปัญหาภายหลัง


