Apa perbedaan antara semua proyek dan subproyek


124

Pada build gradle multiproyek, dapatkah seseorang memberi tahu saya apa sebenarnya perbedaan antara bagian "allprojects" dan "subprojects"? Hanya direktori induk? Apakah ada yang menggunakan keduanya? Jika ya, apakah Anda memiliki aturan umum yang menentukan apa yang biasanya diterapkan di setiap aturan?

Pertanyaan terkait: apa perbedaan antara kedua sintaks (sebenarnya untuk semua proyek DAN subproyek):

subprojects {  ...
}

dan

configure(subprojects) { ...
}

Kapan Anda akan salah satu dari yang lain?

Jawaban:


119

Dalam build gradle multi-project, Anda memiliki rootProject dan subproyek. Kombinasi keduanya adalah semua proyek. RootProject adalah tempat build dimulai. Pola yang umum adalah rootProject tidak memiliki kode dan subproyeknya adalah proyek java. Dalam hal ini, Anda menerapkan plugin java hanya ke subproyek:

subprojects {
    apply plugin: 'java'
} 

Ini akan sama dengan proyek pom agregat maven yang hanya membangun sub-modul.

Mengenai dua sintaksis, keduanya melakukan hal yang persis sama. Yang pertama terlihat lebih baik.


Saya mencoba memahami jawaban Anda, dan mengapa orang ingin "rootProject tidak memiliki kode"?
Marian Paździoch

6
Itu dapat memiliki kode tetapi sebagian besar waktu itu hanya untuk menggabungkan semua sub proyek di bawah satu proyek root.
mallaudin

44

Menambah jawaban Ryan, configuremetode menjadi penting ketika Anda ingin mengkonfigurasi subset objek kustom. Misalnya configure([project(":foo"), project(":bar")]) { ... }atau configure(tasks.matching { it.name.contains("foo") }) { ... }.

Kapan menggunakan allprojectsvs. subprojectstergantung pada keadaan. Seringkali Anda akan menggunakan keduanya. Misalnya, plugin terkait kode seperti plugin Java biasanya diterapkan subprojects, karena dalam banyak build, project root tidak berisi kode apa pun. Plugin Eclipse dan IDEA, di sisi lain, biasanya diterapkan ke allprojects. Jika ragu, lihat contoh dan build dan / atau eksperimen lainnya. Tujuan umumnya adalah untuk menghindari konfigurasi yang tidak relevan. Dalam hal ini, subprojectslebih baik daripada allprojectsasalkan memberikan hasil yang diharapkan.


bagaimana jika beberapa sub proyek saya bergantung pada buffer protokol? haruskah saya menerapkan proto-gradle-plugin di semua? atau sub atau hanya untuk beberapa proyek di sub?
pengguna1870400
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.