สิ่งที่เป็นไฮไลท์ของความแตกต่างที่สำคัญระหว่างสองเครื่องมือ?
โครงสร้างโครงการ
Maven ชอบโครงสร้างของโครงการที่เฉพาะเจาะจง: เราจะต้องทำสิ่งต่าง ๆ ในวิถีทาง Maven Maven มาพร้อมกับขั้นตอนการสร้างร่วมกันกำหนดค่าไว้แล้วในรากpom.xml
ที่ได้รับมรดกตามปกติโดยทุกโครงการอื่น ๆpom.xml
s
Ant + Ivy เปิดกว้างมากขึ้น: ในขณะที่สามารถทำได้มากมีความต้องการขั้นพื้นฐานเพียงเล็กน้อยในแง่ของโครงสร้างโครงการหรือการใช้สคริปต์ ไม่มีงานสร้างเป้าหมายหรือกระบวนการที่กำหนดไว้ล่วงหน้า แต่ละbuild.xml
กระดานเป็นกระดานชนวนที่สะอาด (ยกเว้นในกรณีที่มีสคริปต์อื่นอยู่ด้วย)
ปฐมนิเทศ
Maven เป็นเป้าหมายที่มุ่งเน้น คุณไม่ได้พูดว่า "ดำเนินการเป้าหมายการสร้างนี้" คุณขอให้ "สร้าง" หรือ "ปรับใช้" และ Maven ทำทุกอย่างที่จำเป็นต้องทำเพื่อไปที่นั่น: คุณพูดในสิ่งที่คุณต้องการทำ
Ant + Ivy เป็นงานที่มุ่งเน้น แต่ละงานมีการกำหนดการใช้งานและกำหนดเอง คุณบอกวิธีการทำสิ่งที่คุณต้องการ
การจัดการการพึ่งพา
Maven เป็นที่รู้จักกันดีที่สุดสำหรับการจัดการการพึ่งพาโดยอัตโนมัติ มันจะดาวน์โหลดเวอร์ชันที่ถูกต้องในขณะที่สร้างโดยไม่มีการโต้ตอบกับผู้ใช้ตราบใดที่ที่เก็บ URL นั้นได้รับการกำหนดค่าไว้ล่วงหน้า
Ant ไม่มีการจัดการการพึ่งพายกเว้น "Java Classpath" Ivy เพิ่มการจัดการการพึ่งพาที่น่าเบื่อกว่า Maven เล็กน้อย แต่ก็ยังเป็นไปโดยอัตโนมัติ กุญแจสำคัญในที่นี้คือคุณไม่สามารถเลือกการจัดการการพึ่งพา (เช่น "ขวดที่รวมอยู่ใน distro ของฉันหรือตรวจสอบลงในการควบคุมแหล่งที่มา") หรือคุณสามารถจ้างภายนอกผ่าน Ivy ตัวเลือกนั้นหมายถึงความยืดหยุ่นที่มากขึ้นเพื่อตอบสนองความต้องการของโครงการ
สะดวกในการใช้
Maven เป็น (ในทางทฤษฎี) ใช้งานง่าย นักพัฒนาใด ๆ สามารถรับโครงการ Maven และทราบทันทีว่าแหล่งข้อมูลโครงการทั้งหมดตั้งอยู่ที่ใดและมีไว้เพื่อ: สิ่งนี้เกิดจากจุดแรกเกี่ยวกับ Maven ที่มีวิธีเฉพาะในการทำสิ่งต่าง ๆ
Ant + Ivy อาจมีช่วงการเรียนรู้ที่สูงชันเนื่องจากแต่ละโครงการอาจแตกต่างกัน โครงการที่แตกต่างกันอาจมีวิธีที่แตกต่างกันในการบรรลุเป้าหมายเดียวกัน
ขยาย
Maven อนุญาตให้เขียนปลั๊กอินและเปลี่ยนแปลงกระบวนการสร้าง อย่างไรก็ตามมันออกมาจากกล่องพร้อมกับรูทpom.xml
ที่ผลักดันนักพัฒนาไปสู่กระบวนการสร้างที่กำหนดไว้ล่วงหน้า เป้าหมายใหม่หรือขั้นตอนการสร้างต้องการความคิดที่รอบคอบและความพยายามพิเศษในการแทรกเข้าสู่กระบวนการสร้าง
Ant + Ivy ยังอนุญาตให้เขียนปลั๊กอินและงานใหม่: การทำเช่นนั้นค่อนข้างง่ายและสามารถรวมงานใหม่เข้ากับความพยายามน้อยที่สุด ไม่มีเป้าหมายหรือเป้าหมายที่กำหนดไว้ล่วงหน้าที่จะสับเปลี่ยนหรือรวมภารกิจใหม่เข้าด้วยกัน
มันเกิดขึ้นได้อย่างไรว่า Apache พัฒนาขึ้นเพื่อสร้างเครื่องมือสองชุดที่แยกจากกันโดยสิ้นเชิง
สิ่งแรกที่ต้องทำความเข้าใจก็คือโครงการ Apache ไม่มีอะไรมากไปกว่าร่มภายใต้โครงการอิสระที่แยกจากกัน ทีมที่แตกต่างกันทำงานในโครงการที่แตกต่างกัน ในขณะที่นักพัฒนาแต่ละคนอาจทำงานในหลายโครงการ แต่ไม่มีแผนงานโดยรวมที่รวม Ant, Ivy และ Maven
มดมาก่อน มันถูกออกแบบมาให้เทียบเท่ากับการสร้างจาวา ในขณะที่ Make สามารถสร้างโครงการ Java มันน่าเบื่อ: Make มีอยู่เพื่อรวบรวมคอมไพล์หน่วยการรวบรวมแยกต่างหากจากนั้นเชื่อมโยง วิธี Java จะjavac
รวบรวมทุกอย่างในครั้งเดียวและสิ่งที่เราเรียกว่า "การเชื่อมโยง" เกิดขึ้นจริงในความกล้าหาญของ JVM ที่รันไทม์ Make ไม่ใช่เครื่องมือที่เหมาะสมสำหรับงาน: Makefile สำหรับ Java นั้นเป็นเป้าหมายหนึ่งหรือสองเป้าหมาย ( javac
, jar
)
Ant เพิ่มโครงสร้างเล็กน้อยที่ด้านบนของ Make แต่ไม่ได้เปลี่ยนขั้นตอนพื้นฐาน
หลังจากนั้นครู่หนึ่งชุมชนก็ตระหนักว่าการไล่ล่าไฟล์ jar ไม่สนุก นอกจากนี้ยังไม่มีวิธีมาตรฐานในการเขียนโครงการ การพัฒนา Java ไม่เป็นระเบียบ Maven ถูกออกแบบมาเพื่อแก้ไขปัญหาเหล่านี้: มันจะนำโครงสร้างโครงการทั่วไปและทำให้การล่าสัตว์ลงในไฟล์ jar โดยอัตโนมัติ
อย่างไรก็ตาม Ant ยังคงมีประโยชน์จริงๆ บางโครงการก็ให้ความสำคัญกับกระบวนการโฆษณาของ Ant มากขึ้น บางโครงการไม่ได้รวบรวมรหัส บางโครงการเก่าและไม่น่าที่ใครจะ "อัพเกรด" เป็น Maven
ตามมา Ivy: มันเพิ่มการจัดการการพึ่งพาให้กับ Ant ให้โครงการที่ดีที่สุดของโลกทั้งสอง คุณสามารถเก็บสคริปต์ดั้งเดิมของคุณหรือสภาพแวดล้อมที่กำหนดเองสูง แต่รับคุณสมบัติที่สำคัญที่สุดของ Maven: การจัดการการพึ่งพา