JavaRush /Blog Java /Random-MS /Pengenalan ringkas kepada Gradle

Pengenalan ringkas kepada Gradle

Diterbitkan dalam kumpulan

pengenalan

Topik ulasan ini ialah sistem binaan automatik Gradle. Dalam bahasa Inggeris, binaan sistem dipanggil Build Tools . Pengenalan ringkas kepada Gradle - 1Mengapa ini perlu? Membina projek secara manual di Jawa adalah proses yang agak intensif buruh. Ia adalah perlu untuk menunjukkan dengan betul perpustakaan dan rangka kerja yang diperlukan oleh projek dan di mana projek itu bergantung. Di sini anda boleh membaca artikel yang sangat baik tentang Habré: " Bekerja dengan Java pada baris arahan ." Lambat laun anda akan mula mencipta beberapa skrip untuk mengautomasikan proses ini. Sekarang bayangkan bahawa semua pembangun di seluruh dunia melakukan ini dan semua orang menulis semula apa yang telah ditulis oleh seseorang untuk projek mereka. Dan kemudian sistem pemasangan projek muncul yang mengautomasikan proses ini. Di samping itu, dalam satu pihak, mereka membenarkan anda untuk memasang projek seperti yang anda mahukannya, sebaliknya, mereka menyediakan anda dengan lebih atau kurang alat piawai. Alternatif kepada Gradle ialah sistem binaan automatik Maven. Kedua-dua sistem pemasangan ini, di satu pihak, berbeza, tetapi di sisi lain, mereka mempunyai beberapa persamaan. Terdapat bahan mengenai topik ini di tapak web Gradle: " Berhijrah dari Maven ke Gradle ". Seperti yang dinyatakan dalam tutorial ini, Gradle dan Maven mempunyai perspektif yang berbeza tentang cara membina projek. Gradle adalah berdasarkan graf tugasan, yang boleh bergantung antara satu sama lain. Tugas melakukan beberapa jenis kerja. Maven menggunakan model fasa tertentu, yang dilampirkan "matlamat" tertentu. Matlamat ini adalah tempat beberapa kerja dilakukan. Walau bagaimanapun, dengan pendekatan yang berbeza ini, kedua-dua sistem binaan mengikut konvensyen yang sama dan pengurusan pergantungan adalah serupa. Untuk mula menggunakan Gradle anda perlu memuat turunnya. Di Google atau Yandex kami memasukkan "Gradle Build Tool" dan dalam hasil pertama kami melihat tapak web rasmi: https://gradle.org . Pada halaman Gradle utama terdapat pautan dengan teks "Docs", yang membawa kepada dokumentasi Gradle . Mula-mula, kami perlu memasang (Pasang) Gradle, jadi kami berminat dengan bahagian " Memasang Gradle " dalam dokumentasi. Terdapat banyak kaedah pemasangan, termasuk kaedah "lama", i.e. secara manual (“ Memasang secara manual ”). Menurut arahan, muat turun fail jenis " binari sahaja ", yang akan mempunyai nama seperti gradle-5.1.1-bin.zip. Seterusnya, buka pek arkib dan konfigurasikan pembolehubah persekitaran PATH mengikut arahan. Perkara utama ialah selepas melaksanakan arahan, arahan gradle -vmenunjukkan versi Gradle yang dipasang. Mungkin terdapat masalah apabila menentukan lokasi, sistem akan mendapati Gradle bukan di tempat yang anda mahukan. Oleh itu, pada Windows anda boleh lakukan (pada *nix terdapat analog): for %i in (gradle.bat) do @echo. %~$PATH:i Sekarang, mungkin, kita boleh mula berkenalan.
Pengenalan ringkas kepada Gradle - 2

Memulakan projek Gradle

Saya ingin segera ambil perhatian bahawa Gradle adalah mengenai melaksanakan tugas yang dipanggil tugas (saya akan memanggilnya tugas). Tugasan disediakan oleh pelbagai pemalam . Saya menasihati anda untuk membaca lebih lanjut mengenai pemalam dalam dokumentasi rasmi: " Menggunakan Pemalam Gradle ". Terdapat satu set "Pemalam Teras" yang sentiasa tersedia apabila Gradle dipasang. Terdapat pelbagai kategori pemalam ini, tetapi kami berminat dengan kategori " Utiliti ". Set ini termasuk pemalam " Bina Init Plugin ", yang menyediakan tugas untuk memulakan projek Gradle. Kami berminat untuk mencipta jenis projek: " java-application ". Mari jalankan tugas Gradle: gradle init --type java-application Mari jawab beberapa soalan di sepanjang jalan, sebagai contoh, bahawa kita ingin menggunakan DSL Groovy (bahasa perihalan tugas standard untuk Gradle) dan rangka kerja ujian JUnit (kita akan membincangkan perkara ini dalam ulasan lain). Selepas penciptaan kami akan menerima set fail berikut:
Pengenalan ringkas kepada Gradle - 3
Pertama, selepas pemula kami menerima pembungkus khas yang diprakonfigurasikan untuk versi Gradle kami - ini ialah skrip khas. Saya menasihati anda untuk membaca lebih lanjut mengenainya dalam dokumentasi rasmi - " The Gradle Wrapper ". Kedua, kita melihat Skrip Binaan Gradle - fail build.gradle. Ini ialah fail utama, yang menerangkan perpustakaan dan rangka kerja yang digunakan oleh projek kami, pemalam yang perlu disambungkan kepada projek dan menerangkan pelbagai tugas. Saya menasihati anda untuk membaca lebih lanjut mengenai fail ini dalam dokumentasi rasmi: " Bina Asas Skrip ".
Pengenalan ringkas kepada Gradle - 4

Pemalam dan Tugas

Jika kita melihat sekarang pada kandungan Skrip Binaan, kita akan melihat bahagian pemalam:
plugins {
    id 'java'
    id 'application'
}
Ini adalah pemalam yang sama yang kita bincangkan sebelum ini. Dan jika terdapat pemalam, maka terdapat tugas yang kini tersedia untuk kami. Kami boleh menjalankan perintah tugas gradle dan melihat perkara yang boleh kami lakukan sekarang dengan projek:
Pengenalan ringkas kepada Gradle - 5
Sebagai contoh, dengan melaksanakan gradle runkami akan melancarkan kelas utama aplikasi java kami:
Pengenalan ringkas kepada Gradle - 6
Seperti yang kita lihat, perkara yang sama ditulis di bawah. 2 actionable tasks: 1 executed, 1 up-to-date Apakah maksudnya? Ini bermakna sejumlah 2 tugas telah disiapkan: Selain itu, 1 sebenarnya telah disiapkan, dan satu tidak dilaksanakan, kerana... ia adalah terkini, iaitu keadaan semasa dan tiada apa yang dilakukan. Kita boleh melaksanakan apa yang dipanggil "Larian Kering": gradle run -m Mari kita laksanakan arahan ini, kita akan melihat tugas apa yang akan dilaksanakan untuk melaksanakan tugas larian:
Pengenalan ringkas kepada Gradle - 7
Seperti yang dapat kita lihat, sejumlah 4 tugasan telah disiapkan: sebelum larian dilaksanakan, ia melaksanakan kelas tugas pergantungan. Kelas itu sendiri mempunyai 2 kebergantungan dan oleh itu ia juga melaksanakan compileJava dan processResources. Apabila kami melaksanakan tugas, kami boleh melaksanakannya sambil melihat tahap log tertentu (tahap pengelogan menentukan betapa pentingnya mesej yang ingin kami lihat). Sebagai contoh, kita boleh lakukan gradle run -i. Ini juga akan menunjukkan kepada kami mesej maklumat seperti:
Task :classes UP-TO-DATE
Skipping task ':classes' as it has no actions.
Untuk mendapatkan maklumat lanjut tentang log masuk Gradle, saya menasihati anda untuk merujuk kepada dokumentasi rasmi: " Gradle Logging ". Seperti yang kita dapat lihat, tugas kelas telah dilangkau kerana ia adalah TERKINI , iaitu keadaan semasa, tiada apa yang perlu dilakukan, jadi tiada tindakan. Ini kerana secara lalai Gradle mempunyai " Pemeriksaan terkini " atau yang dipanggil binaan tambahan. Anda boleh membaca lebih lanjut mengenai mekanisme ini dalam dokumentasi Gradle: " Semakan terkini (AKA Incremental Build) ". Tetapi mekanisme ini boleh dilumpuhkan dengan melaksanakan tugas yang menyatakan bendera --rerun-tasks. Sebagai contoh, gradle run --rerun-tasks. Kemudian kita akan melihat: 2 tugasan yang boleh diambil tindakan: 2 dilaksanakan Seperti yang anda lihat, bilangan tugas yang dilaksanakan hanya mengambil kira tahap pertama graf, iaitu, tugas jalankan itu sendiri dan tugas-tugas yang bergantung secara langsung, iaitu , kelas. Tugas yang bergantung kepada kelas tidak dikira di sini (walaupun ia dilaksanakan apabila tugas kelas dilaksanakan). Anda juga harus membaca tentang tugas:
Pengenalan ringkas kepada Gradle - 8

Kebergantungan

Salah satu tugas utama mana-mana sistem binaan ialah mengurus kebergantungan, iaitu perpustakaan/rangka kerja yang diperlukan oleh projek kami. Sistem binaan mesti memastikan bahawa ia tersedia pada masa yang tepat dan memasang artifak akhir aplikasi kami dengan cara yang betul. Secara lalai, selepas gradle init untuk java-application kita akan melihat kandungan berikut dalam skrip binaan:
dependencies {
    implementation 'com.google.guava:guava:26.0-jre'
    testImplementation 'junit:junit:4.12'
}
Di sini jelas apa yang kami sambungkan. Tetapi tanpa pemahaman, tidak jelas apakah pelaksanaan dan ujianImplementasi? Di sini kita perlu beralih semula kepada dokumentasi Gradle, kerana dokumentasi Gradle ditulis dengan baik. Ia dipanggil " Mengurus Konfigurasi Ketergantungan ". Seperti yang dinyatakan dalam dokumentasi, setiap kebergantungan diisytiharkan dengan skop tertentu - kawasan di mana kebergantungan ini akan tersedia. Skop ini ditetapkan oleh beberapa konfigurasi, setiap satunya mempunyai nama yang unik. Menarik juga bahawa banyak pemalam Gradle menambahkan konfigurasi yang dipratentukan. Untuk mengetahui konfigurasi yang kita ada, kita boleh jalankan: gradle --console plain dependencies Dengan cara ini kita akan melihat senarai semua konfigurasi yang tersedia dan kebergantungannya. Kami boleh menapis senarai ini supaya kami hanya melihat konfigurasi yang tersedia sendiri: gradle --console plain dependencies | find " - " Bagaimanakah kami tahu apa yang hendak digunakan? Anda perlu melakukan sedikit bacaan di sini. Kerana Kami menggunakan pemalam "Java", jadi mari kita mulakan dengan dokumentasinya dan bahagian " Pengurusan ketergantungan ". Di sini kita melihat bahawa dahulunya terdapat konfigurasi (aka skop) yang dipanggil "kompilasi" dan ia bermaksud "pergantungan yang diperlukan semasa penyusunan". Tetapi kemudian ia digantikan (dalam Bahasa Inggeris Superseded) dengan pelaksanaan. Anda boleh membaca lebih lanjut mengenai penggantian dalam bahagian " API dan pemisahan pelaksanaan ". Ternyata pergantungan ini akan berada pada "compile classpath". Tetapi kadang-kadang kita mahu kebergantungan kita dimasukkan ke dalam artifak akhir. Untuk apa? Sebagai contoh, kita akan mempunyai balang boleh laku, yang sepatutnya mengandungi semua yang diperlukan. Apa yang patut kita lakukan? Pertama, tiada sokongan sedemikian "di luar kotak" (iaitu, secara lalai, tanpa sebarang tindakan tambahan). Ini dijelaskan oleh fakta bahawa semua orang mahu mengumpul arkib dengan cara mereka sendiri, dan Gradle cuba menjadi minimalis. Kami juga tidak boleh menggunakan arkib jar pada classpath (tanpa manipulasi tambahan dalam kod), kerana ia tidak berfungsi seperti itu (Lihat " Oracle: Menambah Kelas pada Laluan Kelas Fail JAR " untuk butiran lanjut). Oleh itu, cara yang paling indah ialah kod berikut dalam skrip binaan:
jar {
    manifest {
        attributes 'Main-Class': 'jrgradle.App'
    }
    from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
Dalam tetapan tugas jar kami menentukan perkara yang akan ditambahkan pada manifes fail jar (lihat " Oracle: Menetapkan Titik Masuk Aplikasi "). Dan kemudian kami mengatakan bahawa semua kebergantungan yang diperlukan untuk penyusunan akan dimasukkan ke dalam balang. Alternatifnya ialah menggunakan " Gradle Shadow Plugin ". Ia mungkin kelihatan rumit, tetapi pemalam lain boleh menjadikan hidup lebih mudah. Sebagai contoh, apabila membuat aplikasi web (berbanding dengan aplikasi java biasa yang dijalankan), kami akan menggunakan pemalam khas - " Gradle War Plugin ", yang mempunyai tingkah laku yang berbeza dan kehidupan kita akan lebih mudah di sana (semua kebergantungan yang diperlukan akan dimasukkan ke dalam direktori khas yang berasingan oleh pemalam itu sendiri. Kerja sedemikian dikawal oleh cara aplikasi web harus direka bentuk. Tetapi itu cerita yang sama sekali berbeza).
Pengenalan ringkas kepada Gradle - 9

Keputusan

Gradle ialah pilihan terbaik untuk sistem binaan projek. Ini disahkan oleh fakta bahawa ia digunakan oleh pemaju projek terkenal seperti Spring dan Hibernate. Hanya perkara paling asas sahaja yang dibincangkan di atas. Di belakangnya tersembunyi sejuta ciri dan peluang yang dimiliki oleh pembangun. Gradle juga menyokong penciptaan projek berbilang modul, yang tidak diliputi dalam ulasan ini, tetapi Gradle sendiri mempunyai tutorial yang sangat baik: " Mencipta Binaan Berbilang projek ". Saya harap semakan ini juga menunjukkan bahawa dokumentasi Gradle ditulis pada 5+ dan anda boleh mencari perkara yang anda perlukan dengan mudah jika anda memahami tempat untuk mencari. Dan ini akan datang apabila anda memahami asasnya. Di samping itu, Gradle mempunyai tutorial yang hebat. Saya ingin menyelesaikan dengan senarai kecil perkara lain yang boleh anda lihat menggunakan Gradle:
Pengenalan ringkas kepada Gradle - 10
#Viacheslav
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION