Gradle: build.gradle vs. settings.gradle vs. gradle.properties

1. Gambaran keseluruhan

Dalam artikel ini, kita akan melihat pelbagai fail konfigurasi dari projek Gradle Java . Juga, kita akan melihat perincian binaan sebenar.

Anda boleh menyemak artikel ini untuk pengenalan umum mengenai Gradle.

2. membina.gradle

Mari kita anggap bahawa kita baru membuat projek Java baru dengan menjalankan gradle init –type java-application . Ini akan memberi kita projek baru dengan direktori dan struktur fail berikut:

build.gradle gradle wrapper gradle-wrapper.jar gradle-wrapper.properties gradlew gradlew.bat settings.gradle src main java App.java test java AppTest.java

Kita boleh menganggap fail build.gradle sebagai jantung atau otak projek. Fail yang dihasilkan untuk contoh kami kelihatan seperti ini:

plugins { id 'java' id 'application' } mainClassName = 'App' dependencies { compile 'com.google.guava:guava:23.0' testCompile 'junit:junit:4.12' } repositories { jcenter() }

Ini terdiri daripada kod Groovy, atau lebih tepatnya, DSL berasaskan Groovy (bahasa khusus domain) untuk menerangkan binaannya. Kami dapat menentukan kebergantungan kami di sini dan juga menambahkan perkara seperti repositori Maven yang digunakan untuk penyelesaian kebergantungan.

Blok asas asas Gradle adalah projek dan tugas. Dalam kes ini, kerana plugin java digunakan, semua tugas yang diperlukan untuk membina projek Java ditentukan secara tersirat. Sebilangan tugas tersebut adalah pemasangan , periksa , bina , balang , javadoc , bersih dan banyak lagi.

Tugas-tugas ini juga disiapkan sedemikian rupa, sehingga mereka menggambarkan grafik ketergantungan yang berguna untuk proyek Java, yang bermaksud pada umumnya cukup untuk melaksanakan tugas membangun dan Gradle (dan Java plugin) akan memastikan, bahawa semua tugas yang diperlukan dilakukan .

Sekiranya kita memerlukan tugas khusus tambahan, seperti, misalnya, membina gambar Docker, ia juga akan masuk ke dalam fail build.gradle . Definisi tugas yang paling mudah adalah seperti ini:

task hello { doLast { println 'Hello Baeldung!' } }

Kita boleh menjalankan tugas dengan menyatakannya sebagai hujah kepada Gradle CLI seperti ini:

$ gradle -q hello Hello Baeldung!

Itu tidak akan berguna, tetapi mencetak "Hello Baeldung!" sudah tentu.

Sekiranya membina pelbagai projek, kita mungkin mempunyai beberapa fail build.gradle yang berbeza , satu untuk setiap projek.

The build.gradle fail dilaksanakan terhadap Projek contoh, dengan satu projek contoh dicipta setiap Subproject. Tugas-tugas di atas, yang dapat didefinisikan dalam file build.gradle , berada di dalam contoh Projek sebagai bagian dari kumpulan objek Tugas . Tugas itu sendiri terdiri daripada pelbagai tindakan sebagai senarai teratur.

Dalam contoh sebelumnya, kami telah menambahkan penutupan Groovy untuk mencetak "Hello Baeldung!" hingga akhir senarai ini, dengan memanggil doLast (Tindakan penutupan) pada objek Tugas hello kami . Semasa pelaksanaan Tugas , Gradle menjalankan setiap Tindakannya secara teratur, dengan memanggil kaedah Action.execute (T) .

3. tetapan.gradle

Gradle juga menghasilkan fail settings.gradle :

rootProject.name = 'gradle-example'

The settings.gradle fail adalah skrip Groovy juga.

Berbeza dengan fail build.gradle , hanya satu file settings.gradle yang dijalankan setiap build Gradle. Kita boleh menggunakannya untuk menentukan projek binaan pelbagai projek.

Selain itu, kita juga boleh mendaftarkan kod sebagai sebahagian daripada kaitan kitaran hidup yang berbeza.

Rangka kerja memerlukan adanya setting.gradle dalam binaan pelbagai projek, sementara pilihan untuk binaan satu projek.

File ini digunakan setelah membuat instance Pengaturan build, dengan menjalankan file terhadapnya dan dengan demikian mengkonfigurasinya. Ini bermakna bahawa kita menentukan subprojek dalam kita settings.gradle fail seperti ini:

include 'foo', 'bar'

dan Gradle memanggil kaedah void include (String… projectPaths) pada contoh Tetapan ketika membuat build.

4. gradle.properties

Gradle tidak membuat fail gradle.properties secara lalai. Ia dapat berada di lokasi yang berlainan, misalnya di direktori root proyek, di dalam GRADLE_USER_HOME atau di lokasi yang ditentukan oleh bendera baris perintah -Dgradle.user.home .

Fail ini terdiri daripada pasangan nilai-kunci. Kita dapat menggunakannya untuk mengkonfigurasi tingkah laku kerangka itu sendiri dan itu adalah alternatif untuk menggunakan bendera baris perintah untuk konfigurasi.

Contoh kunci yang mungkin adalah:

  • org.gradle.caching = (benar, salah)
  • org.gradle.daemon = (benar, salah)
  • org.gradle.parallel = (benar, salah)
  • org.gradle.logging.level = (senyap, memberi amaran, kitaran hidup, maklumat, debug)

Anda juga boleh menggunakan fail ini untuk menambahkan sifat terus ke objek Projek , misalnya, harta tanah dengan ruang namanya : org.gradle.project.property_to_set

Kes penggunaan lain adalah menentukan parameter JVM seperti ini:

org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

Harap maklum bahawa perlu melancarkan proses JVM untuk menguraikan fail gradle.properties . Ini bermaksud parameter JVM ini hanya mempengaruhi proses JVM yang dilancarkan secara berasingan.

5. Binaan Secara Ringkas

Kita dapat meringkaskan kitaran hidup umum build Gradle seperti berikut, dengan asumsi kita tidak menjalankannya sebagai daemon:

  • Ia dilancarkan sebagai proses JVM baru
  • Ia menguraikan fail gradle.properties dan mengkonfigurasi Gradle dengan sewajarnya
  • Seterusnya, ia membuat contoh Tetapan untuk binaan
  • Kemudian, ia menilai fail settings.gradle terhadap objek Tetapan
  • Ini membuat hierarki Projek , berdasarkan objek Tetapan yang dikonfigurasi
  • Akhirnya, ia melaksanakan setiap fail build.gradle terhadap projeknya

6. Kesimpulannya

Kami telah melihat, bagaimana berbeza fail konfigurasi Gradle memenuhi pelbagai tujuan pembangunan. Kami dapat menggunakannya untuk mengkonfigurasi Gradle build dan Gradle itu sendiri, berdasarkan keperluan projek kami.