- เครื่องมือบิลด์หลายภาษาที่รวดเร็วและขยายต่อได้ รองรับ Java, Scala, Kotlin
- แม้เครื่องมือบิลด์ JVM มักถูกมองว่าช้าและชวนสับสน แต่ Mill ถูกออกแบบมาเพื่อใช้ประโยชน์จากประสิทธิภาพและการใช้งานของ JVM ได้อย่างเต็มที่
- สามารถบิลด์โค้ดเบส Java เดียวกันได้เร็วกว่า Maven 5-10 เท่า และเร็วกว่า Gradle 2-4 เท่า
- ใช้ภาษา Typed Config และกราฟงานแบบ Immutable เพื่อให้การบิลด์สะอาดและเข้าใจได้ง่าย
- ขยายได้ดีตั้งแต่โปรเจ็กต์โมดูลเดี่ยวขนาดเล็กไปจนถึง monorepo ขนาดใหญ่ที่มีหลายร้อยโมดูล
จุดเด่นของ Mill
- ประสิทธิภาพ: กราฟการบิลด์ของ Mill จะทำแคชและประมวลผลงานบิลด์แบบขนานโดยอัตโนมัติ ช่วยให้เวิร์กโฟลว์รวดเร็วและตอบสนองได้ดี พร้อมทั้งมีเครื่องมือสำหรับระบุและแก้ปัญหาคอขวดของการบิลด์ โดยเพิ่มโอเวอร์เฮดให้น้อยที่สุดกับตรรกะที่จำเป็นต่อการบิลด์โปรเจ็กต์
- การดูแลรักษา: เขียนคอนฟิกและตรรกะปรับแต่งด้วยโค้ดที่กระชับและมีการตรวจสอบชนิด แทนการพึ่ง YAML และ Bash พร้อมใช้ต้นไม้โมดูลและกราฟงานแบบไม่เปลี่ยนแปลง สิ่งนี้ช่วยให้พบปัญหาคอนฟิกได้ตั้งแต่เนิ่นๆ และทำให้ IDE (IntelliJ หรือ VSCode) เข้าใจบิลด์ของ Mill ได้ดีกว่าระบบบิลด์อื่น
- ความยืดหยุ่น: งานและโมดูลของ Mill รองรับได้ตั้งแต่การเพิ่มขั้นตอนบิลด์ง่ายๆ ไปจนถึง toolchain ของภาษาทั้งชุด สามารถดึงไลบรารี JVM ใดๆ มาใช้ในบิลด์ ใช้ระบบนิเวศปลั๊กอิน Mill จากผู้พัฒนาภายนอกที่มีอยู่อย่างหลากหลาย หรือเขียนปลั๊กอินเองแล้วเผยแพร่บน Maven Central เพื่อให้ผู้อื่นใช้งานได้
Mill เทียบกับเครื่องมือบิลด์อื่น
- Mill ยืมแนวคิดจากเครื่องมืออื่นอย่าง Maven, Gradle และ Bazel แต่พยายามเรียนรู้จากจุดแข็งของแต่ละตัวและปรับปรุงจุดอ่อนของมัน
- Mill vs Maven
- Mill สานต่อแนวคิดนวัตกรรมของ Maven ในการให้ค่าเริ่มต้นที่ดี
JavaModule ที่มีมาในตัวของ Mill ใช้แนวทาง "convention over configuration" แบบเดียวกับ Maven ดังนั้นโปรเจ็กต์ Mill ขนาดเล็กจึงเริ่มต้นได้ด้วยความพยายามน้อยมาก และโปรเจ็กต์ Mill ขนาดใหญ่ก็มีโครงสร้างที่สม่ำเสมอบนพื้นฐานค่าเริ่มต้นเหล่านี้
- Mill ทำแคชและประมวลผลบิลด์แบบขนานโดยอัตโนมัติ จึงเพิ่มความเร็วได้ 3-10 เท่า
- ไม่ใช่แค่กับงานในตัวที่มากับ Mill แต่รวมถึงงานหรือโมดูลที่ผู้ใช้กำหนดเองด้วย สิ่งนี้ช่วยเพิ่มความคล่องตัวของเวิร์กโฟลว์การบิลด์บนบรรทัดคำสั่งให้สูงสุดเพื่อรักษาประสิทธิภาพการทำงาน โดยเฉพาะในโค้ดเบสขนาดใหญ่ที่มักทำให้การบิลด์ช้าลง เมื่อเทียบกับเวิร์กโฟลว์ "clean install" ของ Maven ที่อาจใช้เวลามากกว่า 1 นาที ใน Mill อาจใช้เวลาเพียงไม่กี่วินาที
- Mill ทำให้การปรับแต่งเครื่องมือบิลด์ง่ายกว่า Maven มาก
- ปกติโปรเจ็กต์จะเติบโตเกินกว่าการคอมไพล์ภาษาเดียว มักต้องมีการสร้างโค้ดแบบกำหนดเอง เวิร์กโฟลว์ linting การผสานเครื่องมือ อาร์ติแฟกต์ผลลัพธ์ หรือการรองรับภาษาเพิ่มเติม ความสามารถในการขยายและประสบการณ์ใช้งาน IDE ของ Mill ทำให้ทำสิ่งเหล่านี้ได้โดยตรงอย่างง่ายดายและปลอดภัยด้วยโค้ดที่ผ่านการตรวจสอบชนิดและงานแบบ sandbox
- Mill vs Gradle
- Mill ยึดตามความกระชับและความสามารถในการขยายของ Gradle
- แทนที่จะเป็น XML ยาวหลายหน้า ทุกบรรทัดในบิลด์ของ Mill มีความหมาย ตัวอย่างเช่น การเพิ่ม dependency ใช้เพียง 1 บรรทัดใน Mill เช่นเดียวกับ Gradle ต่างจากการประกาศ
<dependency> 5 บรรทัดที่พบใน Maven และเช่นเดียวกับ Gradle ผู้ใช้ปลายทางสามารถปรับแต่งบิลด์ให้ตรงความต้องการได้ง่าย โดยไม่ต้องผ่านกระบวนการเขียนปลั๊กอินก่อน
- Mill อาจเร็วกว่า Gradle 2-3 เท่า
- แม้ทั้ง Mill และ Gradle จะทำแคชและประมวลผลบิลด์แบบขนานโดยอัตโนมัติ แต่ Mill ทำสิ่งนี้ด้วยโอเวอร์เฮดคงที่ที่น้อยกว่ามาก ซึ่งหมายถึงเวลาที่เสียไปรอเครื่องมือบิลด์น้อยลง และมีเวลามากขึ้นสำหรับสิ่งที่สำคัญจริงๆ ในโปรเจ็กต์
- Mill ใช้แนวปฏิบัติที่ดีที่สุดเป็นค่าเริ่มต้น
- ทุกส่วนของบิลด์ใน Mill ถูกทำแคชและรองรับ incremental โดยปริยาย งานทุกอย่างของ Mill เขียนเอาต์พุตไปยังตำแหน่งมาตรฐาน และการพึ่งพาระหว่างงานทั้งหมดจะถูกจับโดยอัตโนมัติโดยไม่ต้องใส่หมายเหตุประกอบด้วยตนเอง ขณะที่ Gradle ต้องใช้ความพยายามและความเชี่ยวชาญมากพอสมควรในการทำความเข้าใจบิลด์และตั้งค่าให้ถูกต้อง ประสบการณ์ IDE ที่ยอดเยี่ยมของ Mill ช่วยให้เข้าใจบิลด์ได้ง่ายขึ้น และโมเดลการขยายของมันช่วยป้องกันความผิดพลาดในการตั้งค่าบิลด์ ดังนั้นใน Mill สิ่งที่ทำได้ง่ายที่สุดก็มักเป็นสิ่งที่ถูกต้อง
ยังไม่มีความคิดเห็น