Apa perbedaan antara buildscript dan semua proyek di build.gradle?

135

Pada multi-proyek gradle build, dapatkah seseorang memberi tahu saya apa sebenarnya perbedaan antara bagian "allprojects" dan "buildscript"? Keduanya memiliki repositoriesdan dependenciestugas. Apakah allprojectsuntuk proyek saya? Bagaimana dengan buildscript?

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

dan

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

Jawaban:

137

Bagian buildscriptkonfigurasi " " adalah untuk gradle itu sendiri (yaitu mengubah bagaimana gradle dapat melakukan pembangunan). Jadi bagian ini biasanya akan menyertakan plugin Android Gradle.

Bagian " allprojects" adalah untuk modul yang sedang dibangun oleh Gradle.

Seringkali bagian repositori sama untuk keduanya, karena keduanya akan mendapatkan dependensi mereka dari jcenter biasanya (atau mungkin pakar pusat). Tetapi bagian "dependensi" akan berbeda.

Biasanya bagian "dependensi" untuk "allprojects" kosong karena dependensi untuk setiap modul adalah unik dan akan berada di file "build.gradle" di dalam setiap modul. Namun, jika semua modul berbagi dependensi yang sama maka mereka dapat didaftar di sini.

AndroidGuy
sumber
Apakah kita harus menentukan versi gradle?
IgorGanapolsky
user: 6998684 Versi gradle berlaku untuk seluruh proyek dan dideklarasikan dalam file yang agak tersembunyi. Lihat di "./gradle/wrapper/gradle-wrapper.properties"
AndroidGuy
22

TL; DR: buildscriptmembantu menemukan plugin, allprojectsberlaku untuk semua proyek


https://docs.gradle.org/current/userguide/userguide_single.html#applyPluginBuildscript berkata

Plugin biner yang telah diterbitkan sebagai file jar eksternal dapat ditambahkan ke proyek dengan menambahkan plugin ke classpath skrip build dan kemudian menerapkan plugin.

Jadi, Anda perlu buildscriptgradle untuk menemukan plugin, seperti

Gradle pada intinya sengaja menyediakan sangat sedikit untuk otomatisasi dunia nyata. Semua fitur yang bermanfaat, seperti kemampuan untuk mengkompilasi kode Java, ditambahkan oleh plugin. Plugin menambah tugas baru (mis. JavaCompile), objek domain (mis. SourceSet), konvensi (mis. Sumber Java terletak di src / main / java) serta memperluas objek inti dan objek dari plugin lain.

Tentangallprojects :

API Proyek menyediakan properti allprojectsyang mengembalikan daftar dengan proyek saat ini dan semua sub-proyek di bawahnya. Jika Anda menelepon allprojectsdengan penutupan, pernyataan penutupan didelegasikan ke proyek yang terkait dengan allprojects.

serv-inc
sumber
Bagi saya, sebagai pemula dalam ekosistem android, ini tidak ada artinya. Di mana kita perlu meletakkan ketergantungan kita? Bisakah kita menghapus "buildscript" itu?
Martin Berger
@ MartinBerger: letakkan dependensi Anda di modul build.gradle, bukan build.gradledirektori yang ada di atas, yang akan dibahas pertanyaan ini
serv-inc