เครื่องมือบิลด์อื่นที่มีเป้าหมายเป็นจาวาคืออะไร
หากคุณใช้ Gradle กับเครื่องมืออื่นทำไม
เครื่องมือบิลด์อื่นที่มีเป้าหมายเป็นจาวาคืออะไร
หากคุณใช้ Gradle กับเครื่องมืออื่นทำไม
คำตอบ:
ฉันไม่ได้ใช้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 แต่ในความคิดของฉันยังคงมีให้เห็นถ้าคุณจะไม่แลกเปลี่ยนปัญหาที่รู้จักกันสำหรับคนที่ไม่รู้จัก หลักฐานการพุดดิ้งอยู่ในระหว่างการรับประทานอาหารดังนั้นฉันจะขอสงวนสิทธิ์ในการตัดสินจนกว่าผลิตภัณฑ์นั้นจะโตขึ้นเล็กน้อยและคนอื่น ๆ ได้รีดความหึง (พวกเขาเรียกมันว่ามีเลือดไหลออกมาด้วยเหตุผล) ฉันจะยังคงใช้มันในโครงการของเล่นของฉันแม้ว่าจะดีเสมอที่จะตระหนักถึงตัวเลือกต่างๆ
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
นี่อาจเป็นข้อโต้แย้งเล็กน้อย แต่ Gradle ไม่ได้ซ่อนความจริงที่ว่ามันเป็นภาษาโปรแกรมเต็มเปี่ยม
Ant + ant-contrib นั้นเป็นภาษาโปรแกรมที่สมบูรณ์แบบที่ไม่มีใครต้องการตั้งโปรแกรม
Maven พยายามที่จะใช้วิธีการตรงข้ามของการพยายามที่จะประกาศอย่างสมบูรณ์และบังคับให้คุณเขียนและรวบรวมปลั๊กอินหากคุณต้องการตรรกะ นอกจากนี้ยังกำหนดรูปแบบโครงการที่ยืดหยุ่นได้อย่างสมบูรณ์ Gradle รวมสิ่งที่ดีที่สุดของเครื่องมือเหล่านี้ทั้งหมด:
Gradle เป็นเครื่องมือสร้างที่ปรับแต่งได้และยืดหยุ่นที่สุดที่ฉันยังไม่เคยใช้ ต้องมีการลงทุนล่วงหน้าเพื่อเรียนรู้ DSL และแนวคิดเช่นการกำหนดค่า แต่ถ้าคุณต้องการเครื่องมือสร้าง JVM ที่ไร้สาระและปรับแต่งได้อย่างสมบูรณ์มันยากที่จะเอาชนะ
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"
}
เราใช้ Gradle และเลือกมันมากกว่า Maven และ Ant Ant ให้ความยืดหยุ่นแก่เราโดยรวมและ Ivy ให้การจัดการการพึ่งพาที่ดีกว่า Maven แต่ไม่มีการสนับสนุนที่ดีสำหรับการสร้างหลายโครงการ คุณทำการเข้ารหัสจำนวนมากเพื่อสนับสนุนการสร้างหลายโครงการ นอกจากนี้การมี build-by-Convention เป็นสิ่งที่ดีและทำให้สคริปต์สร้างรัดกุมยิ่งขึ้น ด้วย Maven จะต้องสร้างโดยการประชุมมากเกินไปและการกำหนดกระบวนการสร้างของคุณเองจะกลายเป็นแฮ็ค นอกจากนี้ Maven ยังสนับสนุนทุกโครงการที่เผยแพร่สิ่งประดิษฐ์ บางครั้งคุณมีโครงการแยกออกเป็นโครงการย่อย แต่คุณต้องการให้โครงการย่อยทั้งหมดถูกสร้างและรวมเข้าด้วยกัน ไม่ใช่สิ่งที่ Maven ออกแบบมาเพื่อ
ด้วย Gradle คุณสามารถมีความยืดหยุ่นของ Ant และสร้างตามแบบแผนของ Maven ตัวอย่างเช่นมันเป็นเรื่องสำคัญที่จะขยายวงจรชีวิตการสร้างแบบเดิมด้วยงานของคุณเอง และคุณไม่จำเป็นต้องใช้การประชุมหากคุณไม่ต้องการ Groovy นั้นดีกว่าโค้ดมากกว่า XML ใน Gradle คุณสามารถกำหนดการพึ่งพาระหว่างโปรเจ็กต์บนระบบไฟล์โลคัลโดยไม่จำเป็นต้องเผยแพร่สิ่งประดิษฐ์สำหรับแต่ละไฟล์ไปยังที่เก็บ ในที่สุด Gradle ใช้ Ivy ดังนั้นจึงมีการจัดการการพึ่งพาที่ดีเยี่ยม ข้อเสียจริงเพียงอย่างเดียวสำหรับฉันในตอนนี้คือการขาดการรวม Eclipse ที่เป็นผู้ใหญ่ แต่ตัวเลือกสำหรับ Maven นั้นไม่ค่อยดีขึ้นเท่าไหร่
นี่ไม่ใช่คำตอบของฉันแต่มันสะท้อนกับฉันอย่างแน่นอน มันมาจากRadar Technology ของ ThoughtWorks ตั้งแต่เดือนตุลาคม 2012 :
มีสองสิ่งที่ทำให้เกิดความเหนื่อยล้าด้วยเครื่องมือสร้างที่ใช้ XML เช่น Ant และ Maven: วงเล็บปีกกาที่โกรธมากเกินไปและความหยาบของสถาปัตยกรรมปลั๊กอิน ในขณะที่ปัญหาเกี่ยวกับไวยากรณ์สามารถจัดการผ่านการสร้างสถาปัตยกรรมปลั๊กอินอย่างรุนแรง จำกัด ความสามารถในการสร้างเครื่องมือที่จะเติบโตอย่างสง่างามเป็นโครงการที่ซับซ้อนมากขึ้น เรารู้สึกว่าปลั๊กอินเป็นระดับที่ไม่ถูกต้องของนามธรรมและชอบเครื่องมือที่ใช้ภาษาเช่น Gradle และ Rake แทนเพราะพวกเขาให้นามธรรมที่ละเอียดยิ่งขึ้นและมีความยืดหยุ่นในระยะยาว
Gradle นำความสนุกสนานกลับคืนมาสู่ซอฟต์แวร์การสร้าง / การประกอบ ฉันใช้มดเพื่อสร้างซอฟต์แวร์ตลอดอาชีพการงานของฉันและฉันได้พิจารณาส่วน "buildit" ที่แท้จริงของงาน dev เป็นความชั่วร้ายที่จำเป็น ไม่กี่เดือนหลัง บริษัท ของเราเริ่มเบื่อที่จะไม่ใช้ไบนารี repo (หรือที่รู้จักในการตรวจสอบขวดลงใน vcs) และฉันก็ได้รับมอบหมายให้ตรวจสอบเรื่องนี้ เริ่มต้นด้วยไม้เลื้อยเพราะมันสามารถติดอยู่ด้านบนของมดไม่ได้โชคดีมากที่ได้รับการเผยแพร่สิ่งประดิษฐ์ของฉันเหมือนที่ฉันต้องการ ฉันไปที่ maven และถูกแฮ็กด้วย xml ทำงานได้อย่างยอดเยี่ยมสำหรับ libs ผู้ช่วยง่ายๆ แต่ฉันพบปัญหาร้ายแรงที่พยายามรวมแอปพลิเคชันให้พร้อมสำหรับการปรับใช้ ปลั๊กอิน Google googling และฟอรั่มการอ่านและดาวน์โหลดการสนับสนุนหลายพันล้านขวดสำหรับปลั๊กอินต่างๆที่ฉันมีเวลาใช้ยาก
แต่จากวันแรกอารมณ์ของฉันเริ่มดีขึ้น ฉันไปไหนมาไหน เอาฉันไปสองชั่วโมงเพื่อย้ายโมดูมดตัวแรกและไฟล์บิวด์ก็ไม่มีอะไร ติดตั้งได้ง่ายเพียงหน้าจอเดียว "ว้าว" ตัวใหญ่คือ: สร้างสคริปต์ใน xml มันช่างโง่ขนาดไหน? ความจริงที่ว่าการประกาศการขึ้นต่อกันหนึ่งครั้งใช้เวลาหนึ่งแถวน่าสนใจมากสำหรับฉัน -> คุณสามารถดูการอ้างอิงทั้งหมดสำหรับโครงการหนึ่ง ๆ ในหน้าเดียวได้อย่างง่ายดาย ตั้งแต่นั้นมาฉันก็ตกต่ำอย่างต่อเนื่องสำหรับทุกปัญหาที่ฉันเผชิญจนถึงตอนนี้ก็มีทางออกที่เรียบง่าย ฉันคิดว่านี่คือเหตุผล:
ตอนนี้ฉันใช้เวลาหลายวันพยายามคิดคุณสมบัติใหม่เพื่อเพิ่มในกระบวนการสร้างของเรา นั่นเป็นอย่างไร
นอกจากนี้ยังง่ายกว่ามากในการจัดการการสร้างแบบดั้งเดิม Ant และ Maven มีประสิทธิภาพเฉพาะ Java เท่านั้น มีปลั๊กอินบางตัวสำหรับ Maven ที่พยายามจัดการโครงการดั้งเดิมบางตัว แต่ไม่ทำงานที่มีประสิทธิภาพ งานมดสามารถเขียนได้ที่รวบรวมโครงการพื้นเมือง แต่มันซับซ้อนและอึดอัดเกินไป
เราใช้ Java กับ JNI และมีบิตพื้นเมืองอื่น ๆ อีกมากมาย Gradle ทำให้ Ant Ant ของเราง่ายขึ้นมาก เมื่อเราเริ่มที่จะแนะนำการจัดการการพึ่งพาโครงการพื้นเมืองมันเป็นเรื่องยุ่ง เราได้ Maven มาทำ แต่รหัส Gradle ที่เทียบเท่ากันนั้นเป็นเพียงเศษเสี้ยวของสิ่งที่จำเป็นใน Maven และผู้คนสามารถอ่านและเข้าใจได้โดยไม่ต้องกลายเป็นผู้เชี่ยวชาญ Maven
ฉันเห็นด้วยบางส่วนกับ Ed Staub Gradle นั้นทรงพลังมากกว่าเมื่อเทียบกับ maven และให้ความยืดหยุ่นในระยะยาว
หลังจากทำการประเมินเพื่อย้ายจาก maven ไปยัง gradle เราตัดสินใจที่จะทำ maven เองสำหรับสองประเด็นที่เราพบกับ gradle (ความเร็วช้ากว่า maven proxy ไม่ทำงาน)