อะไรคือความแตกต่างระหว่าง buildscript และ allprojects ใน build.gradle?


135

ในการสร้าง Gradle แบบหลายโปรเจ็กต์มีใครช่วยบอกหน่อยได้ไหมว่าส่วน "allprojects" กับส่วน "buildscript" ต่างกันอย่างไร ทั้งสองมีrepositoriesและdependenciesงาน คือallprojectsสำหรับโครงการของฉันได้อย่างไร เกี่ยวกับอะไรbuildscript?

buildscript {  
     repositories {
         ...
     }
     dependencies {
         ...
     }
}

และ

allprojects(subprojects) { 
     repositories {
         ...
     }
     dependencies {
         ...
     }
}

คำตอบ:


137

ส่วนการbuildscriptกำหนดค่า "" มีไว้สำหรับ gradle เอง (เช่นการเปลี่ยนแปลงวิธีที่ gradle สามารถดำเนินการสร้างได้) ดังนั้นส่วนนี้มักจะรวมปลั๊กอิน Android Gradle

ส่วน " allprojects" มีไว้สำหรับโมดูลที่ Gradle สร้างขึ้น

บ่อยครั้งที่ส่วนที่เก็บจะเหมือนกันสำหรับทั้งสองอย่างเนื่องจากทั้งสองจะได้รับการอ้างอิงจาก jcenter โดยปกติ (หรืออาจเป็น maven central) แต่ส่วน "การอ้างอิง" จะแตกต่างกัน

โดยปกติส่วน "การอ้างอิง" สำหรับ "โครงการทั้งหมด" จะว่างเปล่าเนื่องจากการอ้างอิงสำหรับแต่ละโมดูลจะไม่ซ้ำกันและจะอยู่ในไฟล์ "build.gradle" ภายในแต่ละโมดูล อย่างไรก็ตามหากโมดูลทั้งหมดแชร์การอ้างอิงเดียวกันก็สามารถแสดงรายการได้ที่นี่


เราต้องระบุ gradle version ไหม?
IgorGanapolsky

ผู้ใช้: 6998684 เวอร์ชันของ gradle ใช้กับโปรเจ็กต์ทั้งหมดและมีการประกาศในไฟล์ที่ซ่อนอยู่เล็กน้อย ดูใน "./gradle/wrapper/gradle-wrapper.properties"
AndroidGuy

22

TL; DR: buildscriptช่วยค้นหาปลั๊กอินallprojectsใช้กับทุกโครงการ


https://docs.gradle.org/current/userguide/userguide_single.html#applyPluginBuildscriptพูดว่า

ปลั๊กอินไบนารีที่เผยแพร่เป็นไฟล์ jar ภายนอกสามารถเพิ่มลงในโปรเจ็กต์ได้โดยการเพิ่มปลั๊กอินลงในคลาสพา ธ ของบิลด์สคริปต์แล้วใช้ปลั๊กอิน

ดังนั้นคุณต้องbuildscriptใช้ gradle เพื่อค้นหาปลั๊กอินเช่น

Gradle เป็นแกนหลักโดยเจตนาให้ระบบอัตโนมัติในโลกแห่งความเป็นจริงน้อยมาก คุณลักษณะที่มีประโยชน์ทั้งหมดเช่นความสามารถในการคอมไพล์โค้ด Java จะถูกเพิ่มโดยปลั๊กอิน ปลั๊กอินเพิ่มงานใหม่ (เช่น JavaCompile) อ็อบเจ็กต์โดเมน (เช่น SourceSet) ข้อตกลง (เช่นซอร์ส Java ตั้งอยู่ที่ src / main / java) รวมถึงการขยายอ็อบเจ็กต์หลักและอ็อบเจ็กต์จากปลั๊กอินอื่น ๆ

เกี่ยวกับallprojects :

Project API จัดเตรียมคุณสมบัติallprojectsที่ส่งคืนรายการพร้อมกับโปรเจ็กต์ปัจจุบันและโปรเจ็กต์ย่อยทั้งหมดที่อยู่ข้างใต้ ถ้าคุณโทรกับการปิดงบของการปิดจะมอบหมายให้โครงการที่เกี่ยวข้องกับการallprojectsallprojects


สำหรับฉันในฐานะผู้เริ่มต้นในระบบนิเวศของ Android นี่ไม่มีความหมายอะไรเลย เราต้องวางการอ้างอิงไว้ที่ไหน? เราสามารถลบ "buildscript" นั้นได้หรือไม่?
Martin Berger

@MartinBerger: ใส่การอ้างอิงของคุณในโมดูลbuild.gradleไม่ใช่build.gradleไดเรกทอรีเดียวด้านบนซึ่งคำถามนี้เกี่ยวข้องกับ
serv-inc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.