Maven ทำอะไรในทางทฤษฎีและในทางปฏิบัติ ควรใช้เมื่อใด [ปิด]


156

ฉันกำลังจะเริ่มโครงการ Java เพื่อการฝึกฝน ฉันอ่านเกี่ยวกับ Maven แล้ว แต่ฉันไม่เข้าใจจริง ๆ ว่าควรใช้เมื่อใด

คุณสามารถให้คำแนะนำเชิงปฏิบัติกับฉันได้ไหม Maven ช่วยได้มากไหม? Maven ทำอะไรให้โครงการของฉันได้จริง


เฮ้ดูคำถามของฉันเกี่ยวกับ Maven, Spring และ Roo ฉันใช้ Maven บ่อยๆเมื่อทำงานกับ Eclipse และเพื่อเร่งเวลาในการพัฒนา แต่มีปัญหาอยู่บ้าง ฉันคิดว่าคุณต้องเข้าใจระบบคำอธิบายประกอบ Java ร่วมกับ Maven แต่มีลักษณะที่เป็นคำถามที่ฉันเชื่อมโยง ..
mm24

@ArtB ให้คำอธิบายที่ดีว่า Maven คืออะไร อย่างไรก็ตามอย่างที่ฉันพูดในความคิดเห็นของฉันกับคำตอบของเขาฉันไม่คิดว่าคุณควรใช้มัน หากคุณต้องการเครื่องมือสร้างให้ใช้ Gradle ดาวน์โหลดติดตั้งมันแล้วในโครงการของคุณสร้างไฟล์ที่เรียกว่าเพียงแค่มีสายหนึ่งบอกว่าbuild.gradle apply plugin: 'java'สมมติว่ารหัสต้นฉบับของคุณอยู่ในสถานที่ปกติ ( src/main/javaการทดสอบหน่วยsrc/test/java) gradle buildตอนนี้คุณสามารถสร้างทดสอบและแพคเกจรหัสของคุณด้วยการบอกว่า ง่าย!
Tom Anderson

2
ในการใช้ Gradle คุณจะต้องเรียนรู้ Groovy และแน่นอนว่าคุณจะเจอโครงการโดยใช้ Maven ดังนั้นมันจึงคุ้มค่าที่จะเรียนรู้ นอกจากนี้การเข้าใจ Maven จะทำให้เข้าใจเครื่องมืออื่น ๆ ที่ตามมาหลังจากง่ายขึ้น
เลื่อน

Maven ต้องทำอะไรกับบันทึกย่อ Java เลย?
เลื่อน

1
+1 สำหรับ Gradle ไม่เพียง แต่เป็นผู้ใกล้ชิดกับบ้านสำหรับนักพัฒนา Java ก็สามารถใช้ Maven สิ่งประดิษฐ์และมันสามารถทำให้ไม่ได้มาตรฐานสร้างได้อย่างง่ายดายstackoverflow.com/questions/1163173/...
Kalpesh Soni

คำตอบ:


183

มันทำอะไร

Maven เป็น "เครื่องมือการจัดการการสร้าง" มันมีไว้สำหรับกำหนดวิธีการที่.javaไฟล์ของคุณได้รับการรวบรวม.classบรรจุลงใน.jar(หรือ.warหรือ.ear) ไฟล์ (ก่อน / โพสต์) ประมวลผลด้วยเครื่องมือการจัดการของคุณCLASSPATHและอื่น ๆ ทุกประเภทงานที่ต้อง สร้างโครงการของคุณ มันคล้ายกับApache AntหรือGradleหรือMakefilesใน C / C ++ แต่มันพยายามที่จะมีอยู่ในตัวเองโดยสมบูรณ์ซึ่งคุณไม่จำเป็นต้องมีเครื่องมือหรือสคริปต์เพิ่มเติมโดยรวมงานทั่วไปอื่น ๆ เช่นการดาวน์โหลดและติดตั้งไลบรารีที่จำเป็นเป็นต้น

มันได้รับการออกแบบรอบ ๆ ธีม "build portability" เพื่อให้คุณไม่ได้รับปัญหาเนื่องจากมีรหัสเดียวกันกับ buildscript เดียวกันที่ทำงานบนคอมพิวเตอร์เครื่องหนึ่ง แต่ไม่ใช่ในอีกอันหนึ่ง (นี่เป็นปัญหาที่ทราบกันแล้วเรามี VMs ของ Windows 98 เครื่องเนื่องจากเราไม่สามารถรวบรวมแอปพลิเคชั่น Delphi ของเราได้จากที่อื่น) ด้วยเหตุนี้จึงเป็นวิธีที่ดีที่สุดในการทำงานกับโครงการระหว่างผู้ใช้ IDE ที่ต่างกันเนื่องจากสคริปต์ Ant ที่สร้างจาก IDE นั้นยากที่จะนำเข้าสู่ IDE อื่น ๆ แต่ IDEs ทุกวันนี้เข้าใจและสนับสนุน Maven ( IntelliJ , EclipseและNetBeans) ) แม้ว่าคุณจะไม่ชอบ Maven แต่มันก็กลายเป็นจุดอ้างอิงสำหรับเครื่องมือการสร้างที่ทันสมัยอื่น ๆ ทั้งหมด

ทำไมคุณควรใช้มัน

Maven มีสามสิ่งที่ดีมาก

  1. Maven จะ (หลังจากที่คุณประกาศว่าคุณใช้อันไหน) ดาวน์โหลดไลบรารีทั้งหมดที่คุณใช้และไลบรารีที่พวกเขาใช้ให้คุณโดยอัตโนมัติ นี่เป็นสิ่งที่ดีมากและทำให้การจัดการกับห้องสมุดเป็นเรื่องง่ายมาก นี้จะช่วยให้คุณหลีกเลี่ยง"การพึ่งพานรก" มันคล้ายกับ Apache Ant ของไอวี่

  2. มันใช้ " Convention over Configuration " เพื่อให้เป็นค่าเริ่มต้นคุณไม่จำเป็นต้องกำหนดงานที่คุณต้องการ คุณไม่จำเป็นต้องเขียนขั้นตอน "คอมไพล์", "ทดสอบ", "แพ็คเกจ" หรือ "คลีน" เช่นที่คุณต้องทำใน Ant หรือ Makefile เพียงแค่วางไฟล์ในที่ที่ Maven คาดหวังไว้และมันควรจะทำงานได้ดี

  3. Maven ยังมีจำนวนมากที่ดีปลั๊กอินที่คุณสามารถติดตั้งที่จะจัดการกับงานประจำจำนวนมากจากการสร้างการเรียน Java จากสคี XSD ใช้ JAXBเพื่อวัดความคุ้มครองการทดสอบกับ Cobertura เพียงเพิ่มลงในของคุณpom.xmlและพวกเขาจะทำงานร่วมกับทุกสิ่งที่คุณต้องการ

เส้นโค้งการเรียนรู้เริ่มแรกนั้นสูงชัน แต่ (เกือบ) นักพัฒนา Java มืออาชีพทุกคนใช้ Maven หรือต้องการทำเช่นนั้น คุณควรใช้ Maven ในทุกโครงการแม้ว่าจะไม่แปลกใจถ้ามันต้องใช้เวลาซักพักและบางครั้งคุณก็อยากทำสิ่งต่าง ๆ ด้วยตัวเองเพราะการเรียนรู้สิ่งใหม่ ๆ จะทำให้คุณเจ็บปวด อย่างไรก็ตามเมื่อคุณคุ้นเคยกับ Maven อย่างแท้จริงแล้วคุณจะพบว่าการจัดการงานสร้างนั้นแทบจะไม่มีเวลาเลย

วิธีการเริ่ม

จุดเริ่มต้นที่ดีที่สุดคือ " Maven in 5 Minutes " มันจะช่วยให้คุณเริ่มต้นโครงการที่พร้อมให้คุณตั้งรหัสด้วยไฟล์และโฟลเดอร์ที่จำเป็นทั้งหมดในการตั้งค่า (ใช่ฉันขอแนะนำให้ใช้ archetype แบบเร่งด่วนอย่างน้อยในตอนแรก)

หลังจากเริ่มต้นคุณจะต้องการความเข้าใจที่ดีขึ้นเกี่ยวกับวิธีการใช้เครื่องมือนี้ สำหรับ " Better Builds with Maven " นั้นเป็นสถานที่ที่เข้าใจอย่างถ่องแท้ที่สุดว่ามันทำงานอย่างไร " Maven: The Complete Reference " นั้นมีความทันสมัยมากขึ้น อ่านอันแรกเพื่อความเข้าใจ แต่ใช้อันที่สองเพื่อการอ้างอิง


12
มีผู้พัฒนา Java มืออาชีพมากมายที่ไม่ได้ใช้ Maven และดีใจที่ไม่ได้ใช้ บางส่วนของแนวหินเหล่านี้เพียง แต่ปฏิเสธความซับซ้อนและความยืดหยุ่นของมันและยึดติดกับ Ant หรือสิ่งที่คล้ายกัน แต่จำนวนที่เพิ่มขึ้นของพวกเขาคือคนที่ย้ายไปยังผู้สืบทอด Maven เช่น Gradle และ Buildr ผู้สืบทอดเหล่านี้สืบทอดมาจาก Maven ซึ่งเป็นความคิดในการจัดทำชุดการสร้างขั้นตอนที่ทรงพลัง แต่ช่วยให้เพิ่มขั้นตอนแบบกำหนดเองได้ง่ายขึ้นอย่างมาก เมื่อพิจารณาถึงการมีอยู่ของพวกเขาฉันก็ไม่คิดว่ามีเหตุผลใดที่จะใช้ Maven สำหรับโครงการใหม่
Tom Anderson

5
มีคำถามเสมอว่าจะต้องให้รายละเอียดเท่าไร แต่ถ้าคุณเป็นนักพัฒนา Java โดยเฉลี่ยที่อยู่ในออฟฟิศของคุณอาจเป็น Maven หรือ shitty Ant Hell (Ant + bash + perl + build คอมพิวเตอร์ที่กำหนดเส้นทางเวทมนต์) หากคุณเป็นหนึ่งในผู้โชคดีที่ได้ทำงานกับนักพัฒนา A + ในสภาพแวดล้อมที่ดีและมีอิสระในการเลือกมีตัวเลือกอื่น ๆ (Gradle เป็นหนึ่ง) แต่ถ้าคุณทำงานในที่ธรรมดา Maven เป็นเครื่องมือที่ดีที่สุดที่จะไม่ปล่อยให้เพื่อนร่วมงานของคุณตัดกับบางสิ่งบางอย่างที่แหลมคม
เลื่อน

4
ฉันไม่คิดว่าคุณจะต้องเป็นนักพัฒนา A + เพื่อใช้ Gradle ฉันไม่เห็นว่าทำไมองค์กรที่สามารถนำ Maven ไปใช้ Gradle ไม่ได้ มันเป็นความจริงที่ Gradle ให้คุณยิงตัวเองในแบบเดียวกับที่ Ant ทำ แต่ในแบบที่ Maven ทำค่อนข้างยาก (และฉันมีคอลเลกชันของฟุตยิงเพื่อนร่วมงานของฉันเพื่อพิสูจน์); นั่นคือการแลกเปลี่ยนเพื่อให้สามารถทำสิ่งที่ Maven ทำไม่ได้จริง
Tom Anderson

4
ในแง่ของการใช้บางอย่างเช่น Gradle และหลีกเลี่ยงการยิงเท้าฉันเสนอการจำแนกประเภทของโปรแกรมเมอร์ โปรแกรมเมอร์บางคนไม่กลัวที่จะแก้ไขสคริปต์สร้างและทำให้ถูกต้องมากขึ้นหรือน้อยลง คนเหล่านั้นมีประโยชน์ โปรแกรมเมอร์บางคนกลัวสคริปต์สร้างและจะไม่แตะต้องพวกเขา อย่างน้อยคนเหล่านั้นก็ไม่เป็นอันตราย ฉันอยู่ในทีมชาย 12 คนซึ่งมีเพียงเราสองคนเท่านั้นที่กล้าสัมผัสโครงสร้างและมันใช้งานได้ดีจริง ๆ โปรแกรมเมอร์บางคนไม่กลัวสคริปต์สร้าง แต่จะทำให้สับสนถ้าพวกเขาสัมผัสพวกเขา คนเหล่านั้นมีอันตราย
Tom Anderson

1
ดังนั้นมันจึงเหมือน npm สำหรับ Java
KJW

9

จากเอกสาร Sonatype :

คำตอบสำหรับคำถามนี้ขึ้นอยู่กับมุมมองของคุณเอง ผู้ใช้ Maven ส่วนใหญ่จะเรียก Maven ว่า "เครื่องมือสร้าง": เครื่องมือที่ใช้ในการสร้างสิ่งประดิษฐ์ที่ปรับใช้ได้จากซอร์สโค้ด สร้างวิศวกรและผู้จัดการโครงการอาจอ้างถึง Maven ว่าเป็นสิ่งที่ครอบคลุมมากขึ้น: เครื่องมือการจัดการโครงการ อะไรคือความแตกต่าง? เครื่องมือสร้างเช่น Ant มุ่งเน้นที่การประมวลผลก่อนการรวบรวมบรรจุภัณฑ์การทดสอบและการจัดจำหน่าย เครื่องมือการจัดการโครงการเช่น Maven ให้คุณสมบัติที่เหนือกว่าที่พบในเครื่องมือสร้าง นอกเหนือจากการให้ความสามารถในการสร้าง Maven ยังสามารถเรียกใช้รายงานสร้างเว็บไซต์และอำนวยความสะดวกในการสื่อสารระหว่างสมาชิกของทีมงาน

ฉันขอแนะนำให้ดูที่เอกสาร Sonatype และใช้เวลาดูปลั๊กอินที่มีอยู่เพื่อทำความเข้าใจพลังของ Maven

สั้น ๆ มันทำงานในระดับแนวคิดที่สูงกว่า (พูด) Ant ด้วย Ant คุณจะต้องระบุชุดของไฟล์และทรัพยากรที่คุณต้องการสร้างจากนั้นระบุวิธีที่คุณต้องการให้ jarred รวมกันและระบุลำดับที่ควรเกิดขึ้นใน (clean / compile / jar) ด้วย Maven นี่เป็นสิ่งที่บอกเป็นนัย Maven คาดว่าจะค้นหาไฟล์ของคุณในบางสถานที่และจะทำงานโดยอัตโนมัติกับสิ่งนั้น ดังนั้นการตั้งค่าโครงการด้วย Maven อาจจะง่ายกว่ามาก แต่คุณต้องเล่นตามกฎของ Maven!


ฉันไม่ได้ลงคะแนน แต่บางที downvoters อ่านใบเสนอราคาของคุณจากโฆษณาชวนเชื่อ Sonatype เป็นการรับรองโดยนัยของปรัชญา "เครื่องมือการบริหารโครงการ" ของ Maven เผด็จการ
Tom Anderson

1
ฉันไม่รู้สึกว่าคุณตอบคำถาม OP แต่คุณเพิ่งโพสต์กลโกงการตลาด ... และกลโกงนั้นไร้สาระเนื่องจาก "การบริหารโครงการ" นั้นยิ่งกว่าสิ่งที่ Maven ทำหน้าที่สร้างความสับสนให้มากกว่าที่มันช่วย IMHO
เลื่อน

2
@Brian ขออภัยถ้าความคิดเห็นก่อนหน้าของฉันฟังดูฟลีท แต่ให้ฉันใช้ถ้อยคำใหม่: ฉันรู้สึกว่าความคิดเห็นของคุณอธิบาย Maven ได้ดีถ้าคุณเข้าใจว่า Maven คืออะไร แต่เป็นจุดเริ่มต้นเริ่มต้นมันไม่มีประโยชน์
เลื่อน

5

Mavenเป็นเครื่องมือสร้าง พร้อมด้วยAntหรือGradleเป็นJavaเครื่องมือสำหรับการสร้าง
หากคุณเป็นมือใหม่ใน Java แต่เพียงสร้างโดยใช้ IDE ของคุณเนื่องจากMavenมีช่วงการเรียนรู้ที่สูงชัน


การสนับสนุน IDE สำหรับ Maven ใน NetBeans นั้นดีมากทำให้ช่วงการเรียนรู้แทบจะไม่มีอยู่เลย
Captain Giraffe
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.