ความแตกต่างระหว่างโครงการทั้งหมดและโครงการย่อยคืออะไร


124

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

คำถามที่เกี่ยวข้อง: อะไรคือความแตกต่างระหว่างไวยากรณ์ทั้งสอง (สำหรับโครงการทั้งหมดและโครงการย่อย):

subprojects {  ...
}

และ

configure(subprojects) { ...
}

เมื่อไหร่ที่คุณจะมากกว่ากัน?

คำตอบ:


119

ในการสร้าง gradle แบบหลายโปรเจ็กต์คุณมี rootProject และโปรเจ็กต์ย่อย การรวมกันของทั้งสองเป็นโครงการทั้งหมด rootProject คือจุดเริ่มต้นของการสร้าง รูปแบบทั่วไปคือ rootProject ไม่มีรหัสและโปรเจ็กต์ย่อยคือโปรเจ็กต์ java ในกรณีนี้คุณใช้ปลั๊กอิน java กับโปรเจ็กต์ย่อยเท่านั้น:

subprojects {
    apply plugin: 'java'
} 

สิ่งนี้จะเทียบเท่ากับโปรเจ็กต์ maven aggregate pom ที่สร้างโมดูลย่อย

เกี่ยวกับทั้งสองไวยากรณ์พวกเขาทำสิ่งเดียวกันทุกประการ คนแรกแค่ดูดีกว่า


ฉันพยายามที่จะเข้าใจคำตอบของคุณและทำไมใคร ๆ ถึงต้องการ "rootProject ไม่มีรหัส"?
Marian Paździoch

6
สามารถมีรหัสได้ แต่โดยส่วนใหญ่จะเป็นเพียงการรวมโปรเจ็กต์ย่อยทั้งหมดภายใต้โปรเจ็กต์รูทเดียว
mallaudin

44

การเพิ่มคำตอบของ Ryan configureวิธีการนี้จะมีความสำคัญเมื่อคุณต้องการกำหนดค่าชุดย่อยที่กำหนดเองของวัตถุ ตัวอย่างเช่นconfigure([project(":foo"), project(":bar")]) { ... }หรือconfigure(tasks.matching { it.name.contains("foo") }) { ... }.

ควรใช้allprojectsเมื่อใดเทียบกับsubprojectsสถานการณ์ บ่อยครั้งที่คุณจะใช้ทั้งสองอย่าง ตัวอย่างเช่นโดยทั่วไปแล้วปลั๊กอินที่เกี่ยวข้องกับโค้ดเช่นปลั๊กอิน Java จะถูกนำไปใช้subprojectsเนื่องจากในหลาย ๆ บิวด์โปรเจ็กต์รูทไม่มีโค้ดใด ๆ ในทางกลับกันปลั๊กอิน Eclipse และ IDEA จะถูกนำไปใช้กับallprojects. หากมีข้อสงสัยให้ดูตัวอย่างและงานสร้างและ / หรือการทดลองอื่น ๆ เป้าหมายทั่วไปคือการหลีกเลี่ยงการกำหนดค่าที่ไม่เกี่ยวข้อง ในแง่subprojectsนั้นดีกว่าallprojectsตราบเท่าที่มันให้ผลลัพธ์ที่คาดหวัง


จะเกิดอะไรขึ้นถ้าโครงการย่อยบางส่วนของฉันขึ้นอยู่กับบัฟเฟอร์โปรโตคอล ฉันควรใช้ proto-gradle-plugin กับทุกสิ่งหรือไม่ หรือย่อยหรือเฉพาะบางโครงการที่ย่อย?
user1870400
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.