เหตุใดจึงใช้ Gradle แทน Ant หรือ Maven [ปิด]


324

เครื่องมือบิลด์อื่นที่มีเป้าหมายเป็นจาวาคืออะไร

หากคุณใช้ Gradle กับเครื่องมืออื่นทำไม


6
Google เพิ่มขึ้นด้วย Gradle สำหรับ android sdk developers.google.com/events/io/sessions/325236644 Intellij ได้เพิ่มการรองรับ gradle แล้ว ที่ทำให้ gradle เข้าสู่กระแสหลัก (ไม่เพียง แต่โครงการของเล่น)
จายาน

Gradle ได้สร้างสิ่งประดิษฐ์ฤดูใบไม้ผลิด้วยเช่นกันฉันคิดว่า Hibernate เหมือนกัน
Amir Pashazadeh

คำตอบ:


248

ฉันไม่ได้ใช้Gradleด้วยความโกรธตัวเอง (แค่โครงการของเล่นจนถึงตอนนี้) [ผู้เขียนหมายความว่าพวกเขาใช้ Gradle ในโครงการของเล่นเพียงอย่างเดียวจนถึงตอนนี้ไม่ใช่ว่า Gradle เป็นโครงการของเล่น - ดูความคิดเห็น]แต่ฉันบอกว่า เหตุผลที่คนจะพิจารณาใช้มันอาจเป็นเพราะความผิดหวังของ Ant และ Maven

จากประสบการณ์ของฉัน Ant มักจะเป็นแบบเขียนอย่างเดียวเท่านั้น (ใช่ฉันรู้ว่ามันเป็นไปได้ที่จะเขียนรูปแบบที่สวยงามและสวยงามแต่ความจริงก็คือคนส่วนใหญ่ไม่ได้ทำ) สำหรับโครงการที่ไม่เกี่ยวกับเรื่องไร้สาระมันจะกลายเป็นเรื่องเหลือเชื่อและดูแลอย่างดีเยี่ยมเพื่อให้แน่ใจว่างานสร้างที่ซับซ้อนนั้นสามารถพกพาได้อย่างแท้จริง ลักษณะที่จำเป็นของมันสามารถนำไปสู่การจำลองแบบของการกำหนดค่าระหว่างบิลด์ (แม้ว่าแมโครสามารถช่วยได้ที่นี่)

Maven ใช้แนวทางตรงกันข้ามและคาดหวังให้คุณรวมเข้ากับวงจรชีวิต Maven อย่างสมบูรณ์ ผู้ใช้ Ant ที่มีประสบการณ์จะพบว่าสิ่งนี้สั่นสะเทือนโดยเฉพาะอย่างยิ่งเมื่อ Maven ลบเสรีภาพมากมายที่คุณมีใน Ant ตัวอย่างเช่นมีบล็อก Sonatypeที่ระบุการวิพากษ์วิจารณ์ Maven จำนวนมากและการตอบสนองของพวกเขา

กลไกปลั๊กอิน Maven ช่วยให้การกำหนดค่าการสร้างที่มีประสิทธิภาพมากและรูปแบบการสืบทอดหมายความว่าคุณสามารถกำหนดชุด POM หลักขนาดเล็กที่ห่อหุ้มการกำหนดค่าการสร้างของคุณสำหรับทั้งองค์กรและโครงการแต่ละโครงการสามารถสืบทอดการกำหนดค่าเหล่านั้น การกำหนดค่า Maven นั้นละเอียดมาก (แม้ว่า Maven 3 สัญญาว่าจะกล่าวถึงเรื่องนี้) และหากคุณต้องการทำอะไรที่ "ไม่ใช่วิธี Maven" คุณต้องเขียนปลั๊กอินหรือใช้การรวม Ant ที่แฮ็ค หมายเหตุฉันชอบเขียน Maven plugin แต่ชื่นชมว่าหลายคนจะคัดค้านความพยายามที่เกี่ยวข้อง

Gradle สัญญาว่าจะตีจุดหวานระหว่าง Ant และ Maven มันใช้วิธีการของIvyสำหรับการแก้ปัญหาการพึ่งพา อนุญาตให้มีการประชุมเกี่ยวกับการกำหนดค่า แต่ยังรวมถึงงาน Ant เป็นพลเมืองชั้นหนึ่ง นอกจากนี้ยังช่วยให้คุณใช้ที่เก็บ Maven / Ivy ที่มีอยู่ได้อย่างชาญฉลาด

ดังนั้นหากคุณได้รับผลกระทบและติดอยู่กับจุดปวด Ant / Maven ใด ๆ มันอาจจะคุ้มค่าที่จะลอง Gradle แต่ในความคิดของฉันยังคงมีให้เห็นถ้าคุณจะไม่แลกเปลี่ยนปัญหาที่รู้จักกันสำหรับคนที่ไม่รู้จัก หลักฐานการพุดดิ้งอยู่ในระหว่างการรับประทานอาหารดังนั้นฉันจะขอสงวนสิทธิ์ในการตัดสินจนกว่าผลิตภัณฑ์นั้นจะโตขึ้นเล็กน้อยและคนอื่น ๆ ได้รีดความหึง (พวกเขาเรียกมันว่ามีเลือดไหลออกมาด้วยเหตุผล) ฉันจะยังคงใช้มันในโครงการของเล่นของฉันแม้ว่าจะดีเสมอที่จะตระหนักถึงตัวเลือกต่างๆ


69
@ Tom ฉันไม่ได้พูดว่า Gradle เป็นโครงการของเล่น แต่ฉันได้ใช้มันในโครงการของเล่นจนถึงตอนนี้ ขออภัยคุณรู้สึกผิด
ผู้ขายรวย

18
Sleer - แม้จะอายุมากก็ตามฉันก็แก้ไขโพสต์เพื่อให้ความกระจ่างแบบอินไลน์สิ่งที่ชัดเจนในความคิดเห็น - ความเข้าใจผิดสีโพสต์ทันทีเป็น anti-Gradle หากมีคนค้นคว้า Gradle (เช่นตัวเอง) ในตอนแรกเข้าใจผิดว่าประโยคเปิด (เช่นฉัน) พวกเขาอาจไม่อ่านมากขึ้นหรืออ่านความคิดเห็นที่ชัดเจน (เหมือนที่ฉันทำ) โปรดย้อนกลับ / แก้ไขการเปลี่ยนแปลงของฉันหากคุณไม่เห็นด้วย / ไม่ชอบ
Bert F

48
สำหรับสิ่งที่คุ้มค่าฉันไม่ได้รับความประทับใจ @RichSeller หมายความว่า Gradle เป็นโครงการของเล่นเลย (แม้กระทั่งก่อนที่จะอ่านส่วนหนึ่งในวงเล็บเหลี่ยม)
Jack Leow

2
เมื่อฉันอ่าน "แค่โครงการของเล่นจนถึงตอนนี้" ฉันได้รับความประทับใจทันทีที่ผู้เขียนอ้างถึง Gradle ว่าตัวเองเป็นโครงการของเล่นโดยเฉพาะหลังจากสับสน "ฉันไม่ได้ใช้ Gradle ด้วยความโกรธตัวเอง" สิ่งนี้ชี้ให้เห็นว่าผู้แต่งใช้ Gradle เมื่อไม่โกรธ ฉันขอแนะนำให้เขียนประโยคแรกทั้งประโยคใหม่
osa

79

Gradle สามารถใช้งานได้หลากหลาย - มันมีดสวิสกองทัพดีกว่า Ant - แต่มันเน้นไปที่การสร้างหลายโครงการโดยเฉพาะ

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

Gradle มีสองขั้นตอนที่แตกต่าง: การประเมินและการดำเนินการ โดยทั่วไปในระหว่างการประเมินผล Gradle จะค้นหาและประเมินสคริปต์การสร้างในไดเรกทอรีที่ควรจะมองหา ในระหว่างการดำเนินการ Gradle จะดำเนินการงานที่ได้รับการโหลดในระหว่างการประเมินผลโดยคำนึงถึงการพึ่งพางานระหว่างบัญชี

ด้านบนของคุณลักษณะการเขียนโปรแกรมพึ่งพาเหล่านี้ Gradle เพิ่มโครงการและคุณสมบัติการพึ่งพา JAR โดยการรวมกับ Apache Ivy อย่างที่คุณรู้ว่า Ivy เป็นเครื่องมือการจัดการการพึ่งพาอาศัยที่ทรงพลังและมีความเห็นน้อยกว่า Maven

Gradle ตรวจสอบการพึ่งพาระหว่างโครงการและระหว่างโครงการและ JARs Gradle ทำงานกับที่เก็บ Maven (ดาวน์โหลดและอัพโหลด) เช่น iBiblio หนึ่งหรือที่เก็บของคุณเอง แต่ยังรองรับและโครงสร้างพื้นฐานพื้นที่เก็บข้อมูลชนิดอื่นที่คุณอาจมี

ในการสร้างหลายโครงการ Gradle สามารถปรับได้และปรับให้เข้ากับโครงสร้างและสถาปัตยกรรมของบิลด์ คุณไม่จำเป็นต้องปรับโครงสร้างหรือสถาปัตยกรรมของคุณเป็นเครื่องมือสร้างตามที่ Maven ต้องการ

Gradle พยายามอย่างหนักไม่ให้ขวางทางคุณความพยายามของ Maven แทบจะไม่เคยทำเลย การประชุมเป็นสิ่งที่ดี แต่ก็มีความยืดหยุ่น Gradle ให้คุณสมบัติมากมายมากกว่า Maven แต่ที่สำคัญที่สุดในหลายกรณี Gradle จะให้เส้นทางการเปลี่ยนภาพที่ไม่เจ็บปวดออกไปจาก Maven


64

นี่อาจเป็นข้อโต้แย้งเล็กน้อย แต่ Gradle ไม่ได้ซ่อนความจริงที่ว่ามันเป็นภาษาโปรแกรมเต็มเปี่ยม

Ant + ant-contrib นั้นเป็นภาษาโปรแกรมที่สมบูรณ์แบบที่ไม่มีใครต้องการตั้งโปรแกรม

Maven พยายามที่จะใช้วิธีการตรงข้ามของการพยายามที่จะประกาศอย่างสมบูรณ์และบังคับให้คุณเขียนและรวบรวมปลั๊กอินหากคุณต้องการตรรกะ นอกจากนี้ยังกำหนดรูปแบบโครงการที่ยืดหยุ่นได้อย่างสมบูรณ์ Gradle รวมสิ่งที่ดีที่สุดของเครื่องมือเหล่านี้ทั้งหมด:

  • มันเป็นไปตามการประชุมกำหนดค่า (ala Maven) แต่เฉพาะในขอบเขตที่คุณต้องการ
  • มันช่วยให้คุณเขียนงานที่กำหนดเองที่มีความยืดหยุ่นเช่นเดียวกับใน Ant
  • ให้การสนับสนุนโครงการหลายโมดูลที่เหนือกว่าทั้ง Ant และ Maven
  • มันมี DSL ที่ทำให้สิ่ง 80% ง่ายและ 20% เป็นไปได้ (ต่างจากเครื่องมือสร้างอื่น ๆ ที่ทำให้ 80% ง่าย 10% และ 10% เป็นไปไม่ได้อย่างมีประสิทธิภาพ)

Gradle เป็นเครื่องมือสร้างที่ปรับแต่งได้และยืดหยุ่นที่สุดที่ฉันยังไม่เคยใช้ ต้องมีการลงทุนล่วงหน้าเพื่อเรียนรู้ DSL และแนวคิดเช่นการกำหนดค่า แต่ถ้าคุณต้องการเครื่องมือสร้าง JVM ที่ไร้สาระและปรับแต่งได้อย่างสมบูรณ์มันยากที่จะเอาชนะ


49

Gradle ผสมผสานทั้ง Ant และ Maven เข้าด้วยกันได้อย่างดีที่สุดจากทั้งสองเฟรม ความยืดหยุ่นจาก Ant และแบบแผนในการกำหนดค่าการจัดการการพึ่งพาและปลั๊กอินจาก Maven

ดังนั้นถ้าคุณต้องการสร้าง java มาตรฐานเหมือนใน maven แต่งานทดสอบต้องทำตามขั้นตอนที่กำหนดเองมันอาจมีลักษณะดังนี้

build.gradle:

apply plugin:'java'
task test{
  doFirst{
    ant.copy(toDir:'build/test-classes'){fileset dir:'src/test/extra-resources'}
  }
  doLast{
    ...
  }
}

ด้านบนของมันใช้ไวยากรณ์ Groovy ซึ่งให้พลังการแสดงออกมากขึ้นแล้ว xml ของ ant / maven

มันเป็นชุดของมด - คุณสามารถใช้งาน Ant ทั้งหมดใน gradle ด้วย nicer ไวยากรณ์เหมือน groovy เช่น

ant.copy(file:'a.txt', toDir:"xyz")

หรือ

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}

35

เราใช้ Gradle และเลือกมันมากกว่า Maven และ Ant Ant ให้ความยืดหยุ่นแก่เราโดยรวมและ Ivy ให้การจัดการการพึ่งพาที่ดีกว่า Maven แต่ไม่มีการสนับสนุนที่ดีสำหรับการสร้างหลายโครงการ คุณทำการเข้ารหัสจำนวนมากเพื่อสนับสนุนการสร้างหลายโครงการ นอกจากนี้การมี build-by-Convention เป็นสิ่งที่ดีและทำให้สคริปต์สร้างรัดกุมยิ่งขึ้น ด้วย Maven จะต้องสร้างโดยการประชุมมากเกินไปและการกำหนดกระบวนการสร้างของคุณเองจะกลายเป็นแฮ็ค นอกจากนี้ Maven ยังสนับสนุนทุกโครงการที่เผยแพร่สิ่งประดิษฐ์ บางครั้งคุณมีโครงการแยกออกเป็นโครงการย่อย แต่คุณต้องการให้โครงการย่อยทั้งหมดถูกสร้างและรวมเข้าด้วยกัน ไม่ใช่สิ่งที่ Maven ออกแบบมาเพื่อ

ด้วย Gradle คุณสามารถมีความยืดหยุ่นของ Ant และสร้างตามแบบแผนของ Maven ตัวอย่างเช่นมันเป็นเรื่องสำคัญที่จะขยายวงจรชีวิตการสร้างแบบเดิมด้วยงานของคุณเอง และคุณไม่จำเป็นต้องใช้การประชุมหากคุณไม่ต้องการ Groovy นั้นดีกว่าโค้ดมากกว่า XML ใน Gradle คุณสามารถกำหนดการพึ่งพาระหว่างโปรเจ็กต์บนระบบไฟล์โลคัลโดยไม่จำเป็นต้องเผยแพร่สิ่งประดิษฐ์สำหรับแต่ละไฟล์ไปยังที่เก็บ ในที่สุด Gradle ใช้ Ivy ดังนั้นจึงมีการจัดการการพึ่งพาที่ดีเยี่ยม ข้อเสียจริงเพียงอย่างเดียวสำหรับฉันในตอนนี้คือการขาดการรวม Eclipse ที่เป็นผู้ใหญ่ แต่ตัวเลือกสำหรับ Maven นั้นไม่ค่อยดีขึ้นเท่าไหร่


2
โดยส่วนตัวแล้วฉันคิดว่าการรวม Eclipse นั้นใช้ได้ดี การติดตั้งลงใน Juno นั้นค่อนข้างง่าย
djangofan

1
2 ปีหลังจากผู้เขียนเขียนคำตอบนี้แม้ว่า!
เดนนิส

21

นี่ไม่ใช่คำตอบของฉันแต่มันสะท้อนกับฉันอย่างแน่นอน มันมาจากRadar Technology ของ ThoughtWorks ตั้งแต่เดือนตุลาคม 2012 :

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


16

Gradle นำความสนุกสนานกลับคืนมาสู่ซอฟต์แวร์การสร้าง / การประกอบ ฉันใช้มดเพื่อสร้างซอฟต์แวร์ตลอดอาชีพการงานของฉันและฉันได้พิจารณาส่วน "buildit" ที่แท้จริงของงาน dev เป็นความชั่วร้ายที่จำเป็น ไม่กี่เดือนหลัง บริษัท ของเราเริ่มเบื่อที่จะไม่ใช้ไบนารี repo (หรือที่รู้จักในการตรวจสอบขวดลงใน vcs) และฉันก็ได้รับมอบหมายให้ตรวจสอบเรื่องนี้ เริ่มต้นด้วยไม้เลื้อยเพราะมันสามารถติดอยู่ด้านบนของมดไม่ได้โชคดีมากที่ได้รับการเผยแพร่สิ่งประดิษฐ์ของฉันเหมือนที่ฉันต้องการ ฉันไปที่ maven และถูกแฮ็กด้วย xml ทำงานได้อย่างยอดเยี่ยมสำหรับ libs ผู้ช่วยง่ายๆ แต่ฉันพบปัญหาร้ายแรงที่พยายามรวมแอปพลิเคชันให้พร้อมสำหรับการปรับใช้ ปลั๊กอิน Google googling และฟอรั่มการอ่านและดาวน์โหลดการสนับสนุนหลายพันล้านขวดสำหรับปลั๊กอินต่างๆที่ฉันมีเวลาใช้ยาก

แต่จากวันแรกอารมณ์ของฉันเริ่มดีขึ้น ฉันไปไหนมาไหน เอาฉันไปสองชั่วโมงเพื่อย้ายโมดูมดตัวแรกและไฟล์บิวด์ก็ไม่มีอะไร ติดตั้งได้ง่ายเพียงหน้าจอเดียว "ว้าว" ตัวใหญ่คือ: สร้างสคริปต์ใน xml มันช่างโง่ขนาดไหน? ความจริงที่ว่าการประกาศการขึ้นต่อกันหนึ่งครั้งใช้เวลาหนึ่งแถวน่าสนใจมากสำหรับฉัน -> คุณสามารถดูการอ้างอิงทั้งหมดสำหรับโครงการหนึ่ง ๆ ในหน้าเดียวได้อย่างง่ายดาย ตั้งแต่นั้นมาฉันก็ตกต่ำอย่างต่อเนื่องสำหรับทุกปัญหาที่ฉันเผชิญจนถึงตอนนี้ก็มีทางออกที่เรียบง่าย ฉันคิดว่านี่คือเหตุผล:

  • Groovy นั้นใช้งานง่ายมากสำหรับนักพัฒนาจาวา
  • เอกสารดีมากไปเลย
  • ความยืดหยุ่นไม่มีที่สิ้นสุด

ตอนนี้ฉันใช้เวลาหลายวันพยายามคิดคุณสมบัติใหม่เพื่อเพิ่มในกระบวนการสร้างของเรา นั่นเป็นอย่างไร


+1 สำหรับ " บิลด์สคริปต์ใน xml มันช่างโง่ขนาดไหน" ในปี 2000 XML ถือว่าเป็นสิ่งที่ยอดเยี่ยมที่สุดเท่าที่เคยมีมาดังนั้นในความเป็นธรรมทั้งหมดมันดูทันสมัยกว่าโง่ในเวลานั้น โดยทั่วไปภาษาการเขียนโปรแกรมที่ใช้ XML นั้นเป็น lisps เนื่องจากมีตัวคั่นเปิด / ปิดสำหรับทุกคำสั่ง แต่มันเป็นเสียงกระเพื่อมเวอร์ชั่น super-verbose โดยที่โค้ด 4 ตัวกลายเป็น 40 ตัวอักษร เป็นวิธีหนึ่งในการเรียนรู้วิธีพิมพ์ แต่ไม่ใช่ถ้วยชาของฉัน
GlenPeterson

8

นอกจากนี้ยังง่ายกว่ามากในการจัดการการสร้างแบบดั้งเดิม Ant และ Maven มีประสิทธิภาพเฉพาะ Java เท่านั้น มีปลั๊กอินบางตัวสำหรับ Maven ที่พยายามจัดการโครงการดั้งเดิมบางตัว แต่ไม่ทำงานที่มีประสิทธิภาพ งานมดสามารถเขียนได้ที่รวบรวมโครงการพื้นเมือง แต่มันซับซ้อนและอึดอัดเกินไป

เราใช้ Java กับ JNI และมีบิตพื้นเมืองอื่น ๆ อีกมากมาย Gradle ทำให้ Ant Ant ของเราง่ายขึ้นมาก เมื่อเราเริ่มที่จะแนะนำการจัดการการพึ่งพาโครงการพื้นเมืองมันเป็นเรื่องยุ่ง เราได้ Maven มาทำ แต่รหัส Gradle ที่เทียบเท่ากันนั้นเป็นเพียงเศษเสี้ยวของสิ่งที่จำเป็นใน Maven และผู้คนสามารถอ่านและเข้าใจได้โดยไม่ต้องกลายเป็นผู้เชี่ยวชาญ Maven


3

ฉันเห็นด้วยบางส่วนกับ Ed Staub Gradle นั้นทรงพลังมากกว่าเมื่อเทียบกับ maven และให้ความยืดหยุ่นในระยะยาว

หลังจากทำการประเมินเพื่อย้ายจาก maven ไปยัง gradle เราตัดสินใจที่จะทำ maven เองสำหรับสองประเด็นที่เราพบกับ gradle (ความเร็วช้ากว่า maven proxy ไม่ทำงาน)


ฉันมีปัญหาพร็อกซีกับ v1.2 แต่หลังจากนั้นฉันคิดว่ามันใช้งานได้ ctnlm หรือแอพแบบนี้เป็นวิธีแก้ปัญหาสำหรับ maven ในการแก้ปัญหาพร็อกซี NTLM Gradle ได้รับการสนับสนุนนี้นอกกรอบ แม้ว่าจะเป็นเรื่องเล็กน้อยดังนั้นฉันสงสัยว่าทำไม Maven ไม่เคยได้รับการสนับสนุนนี้ออกจากกล่องสำหรับผู้รับมอบสิทธิ์ตาม NTLM
skipy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.