JavaRush /Java blogi /Random-UZ /Gradle haqida qisqacha ma'lumot
Viacheslav
Daraja

Gradle haqida qisqacha ma'lumot

Guruhda nashr etilgan

Kirish

Ushbu sharhning mavzusi Gradle avtomatik qurish tizimi bo'ladi. Ingliz tilida qurish tizimlari Build Tools deb ataladi . Gradle-ga qisqacha kirish - 1Nega bu hatto kerak? Java-da loyihalarni qo'lda qurish ancha mehnat talab qiladigan jarayondir. Loyihaga kerak bo'lgan va loyiha bog'liq bo'lgan kutubxonalar va ramkalarni to'g'ri ko'rsatish kerak. Bu yerda siz Habré haqida ajoyib maqolani o'qishingiz mumkin: " Buyruqlar satrida Java bilan ishlash ." Ertami-kechmi siz ushbu jarayonni avtomatlashtirish uchun ba'zi skriptlarni yaratishni boshlaysiz. Endi tasavvur qiling-a, butun dunyodagi barcha ishlab chiquvchilar buni qiladilar va har bir kishi o'z loyihasi uchun kimdir allaqachon yozgan narsalarni yana yozadi. Va keyin bu jarayonni avtomatlashtiradigan loyiha yig'ish tizimlari paydo bo'ldi. Bundan tashqari, bir tomondan, ular loyihani o'zingiz xohlagan tarzda yig'ish imkonini beradi, boshqa tomondan, ular sizga ko'proq yoki kamroq standartlashtirilgan vositalarni taqdim etadi. Gradle-ga alternativa Maven avtomatlashtirilgan qurish tizimidir. Ushbu ikkita yig'ish tizimi, bir tomondan, farq qiladi, lekin boshqa tomondan, ular bir qator o'xshashliklarga ega. Gradle veb-saytida ushbu mavzu bo'yicha material mavjud: " Mavendan Gradlga o'tish ". Ushbu qo'llanmada aytilganidek, Gradle va Maven loyihani qanday qurish bo'yicha boshqacha nuqtai nazarga ega. Gradle bir-biriga bog'liq bo'lishi mumkin bo'lgan vazifalar grafigiga asoslangan. Vazifalar qandaydir ishlarni bajaradi. Maven ma'lum "maqsadlar" biriktirilgan ma'lum bosqichlar modelidan foydalanadi. Bu maqsadlar ba'zi ishlar amalga oshiriladigan joydir. Biroq, bu turli yondashuvlar bilan, ikkala qurish tizimi ham bir xil konventsiyaga amal qiladi va qaramlikni boshqarish o'xshashdir. Gradle-dan foydalanishni boshlash uchun uni yuklab olishingiz kerak. Google yoki Yandex-da biz "Gradle Build Tool" ni kiritamiz va birinchi natijalarda biz rasmiy veb-saytni ko'ramiz: https://gradle.org . Gradlening asosiy sahifasida Gradle hujjatlariga olib boradigan "Hujjatlar" matni bilan havola mavjud . Birinchidan, biz Gradle-ni o'rnatishimiz kerak (O'rnatish), shuning uchun biz hujjatlarning " Gradle o'rnatish " bo'limiga qiziqamiz . Ko'p o'rnatish usullari mavjud, jumladan, "eski moda" usuli, ya'ni. qo'lda (" Qo'lda o'rnatish "). Ko'rsatmalarga muvofiq, gradle-5.1.1-bin.zip kabi nomga ega bo'lgan " faqat ikkilik " turdagi faylni yuklab oling. Keyinchalik, arxivni oching va ko'rsatmalarga muvofiq PATH muhit o'zgaruvchisini sozlang. Asosiysi, ko'rsatmalar bajarilgandan so'ng, buyruq gradle -vo'rnatilgan Gradle versiyasini ko'rsatadi. Muammo bo'lishi mumkin, chunki joylashuvni aniqlashda tizim Gradle-ni siz xohlagan joydan topmaydi. Shuning uchun, Windows-da siz shunday qilishingiz mumkin (*nix-da analoglar mavjud): for %i in (gradle.bat) do @echo. %~$PATH:i Endi, ehtimol, biz tanishishni boshlashimiz mumkin.
Gradle-ga qisqacha kirish - 2

Gradle loyihasini ishga tushirish

Darhol ta'kidlashni istardimki, Gradle vazifalar deb ataladigan vazifalarni bajarish haqida ( men ularni vazifalar deb atayman). Vazifalar turli plaginlar tomonidan taqdim etiladi . Men sizga rasmiy hujjatlarda plaginlar haqida ko'proq o'qishni maslahat beraman: " Gradle plaginlarini ishlatish ". Gradle o'rnatilganda doimo mavjud bo'lgan "Yadro plaginlari" to'plami mavjud. Ushbu plaginlarning turli toifalari mavjud, ammo biz " Utility " toifasiga qiziqamiz . Ushbu to'plam Gradle loyihasini ishga tushirish uchun vazifalarni ta'minlovchi " Build Init Plugin " plaginini o'z ichiga oladi. Biz loyiha turini yaratishdan manfaatdormiz: " java-ilova ". Keling, Gradle vazifasini bajaramiz: gradle init --type java-application Keling, ba'zi savollarga javob beraylik, masalan, Groovy DSL (Gradle uchun standart vazifa tavsif tili) va JUnit test tizimidan foydalanmoqchimiz (bu haqda boshqa sharhda gaplashamiz). Yaratgandan so'ng biz quyidagi fayllar to'plamini olamiz:
Gradle-ga qisqacha kirish - 3
Birinchidan, ishga tushirilgandan so'ng biz Gradle versiyamiz uchun oldindan tuzilgan maxsus o'ramni olamiz - bu maxsus skript. Men sizga bu haqda ko'proq rasmiy hujjatlarda - " The Gradle Wrapper " da o'qishni maslahat beraman. Ikkinchidan, biz Gradle Build skriptini - build.gradle faylini ko'ramiz. Bu loyihamiz qaysi kutubxonalar va ramkalardan foydalanishini, qaysi plaginlarni loyihaga ulash kerakligini va turli vazifalarni tavsiflovchi asosiy fayldir. Men sizga ushbu fayl haqida ko'proq ma'lumotni rasmiy hujjatlarda o'qishni maslahat beraman: " Skriptni yaratish asoslari ".
Gradle-ga qisqacha kirish - 4

Plaginlar va vazifalar

Agar biz hozir Build skriptining mazmunini ko'rib chiqsak, plaginlar bo'limini ko'ramiz:
plugins {
    id 'java'
    id 'application'
}
Bu biz ilgari aytib o'tgan bir xil plaginlar. Va agar plaginlar mavjud bo'lsa, unda biz uchun mavjud bo'lgan vazifalar mavjud. Biz gradle tasks buyrug'ini ishga tushirishimiz va endi loyiha bilan nima qilishimiz mumkinligini ko'rishimiz mumkin:
Gradle-ga qisqacha kirish - 5
Masalan, gradle runbiz java ilovamizning asosiy sinfini ishga tushiramiz:
Gradle-ga qisqacha kirish - 6
Ko'rib turganimizdek, quyida ham shunday yozilgan.Bu 2 actionable tasks: 1 executed, 1 up-to-date nimani anglatadi? Bu shuni anglatadiki, jami 2 ta vazifa bajarildi: Bundan tashqari, 1 tasi haqiqatda bajarildi va bittasi bajarilmadi, chunki... u dolzarb, ya'ni davlat joriy va hech narsa qilinmagan. Biz "Quruq ishga tushirish" deb ataladigan amalni bajarishimiz mumkin: gradle run -m Keling, ushbu buyruqni bajaramiz, biz ishga tushirish vazifasini bajarish uchun qanday vazifalar bajarilishini ko'ramiz:
Gradle-ga qisqacha kirish - 7
Ko'rib turganimizdek, jami 4 ta vazifa bajarildi: ishga tushirishdan oldin u qaramlik topshiriqlari sinflarini bajardi. Sinflarning o'zi ikkita bog'liqlikka ega va shuning uchun u compileJava va processResources-ni ham bajardi. Vazifani bajarganimizda, biz uni ma'lum darajadagi jurnallarni ko'rish paytida bajarishimiz mumkin (ro'yxatga olish darajasi biz qanchalik muhim xabarlarni ko'rishni xohlayotganimizni aniqlaydi). Masalan, biz qila olamiz gradle run -i. Bu bizga quyidagi kabi ma'lumot xabarlarini ham ko'rsatadi:
Task :classes UP-TO-DATE
Skipping task ':classes' as it has no actions.
Gradle-da tizimga kirish haqida ko'proq ma'lumot olish uchun sizga rasmiy hujjatlarga murojaat qilishingizni maslahat beraman: " Gradle Logging ". Ko'rib turganimizdek, sinflar vazifasi o'tkazib yuborildi, chunki u UP-TO-DATE , ya'ni holat joriy, hech narsa qilish kerak emas, shuning uchun hech qanday harakatlar yo'q edi. Buning sababi, sukut bo'yicha Gradle-da " So'nggi tekshiruvlar " yoki qo'shimcha qurilish deb ataladigan narsa mavjud. Ushbu mexanizm haqida ko'proq Gradle hujjatlarida o'qishingiz mumkin: " Yangilangan tekshiruvlar (AKA Incremental Build) ". Ammo bu mexanizmni --rerun-tasks bayrog'ini ko'rsatuvchi vazifani bajarish orqali o'chirib qo'yish mumkin. Masalan, gradle run --rerun-tasks. Keyin biz ko'ramiz: 2 ta bajariladigan vazifa: 2 ta bajarilgan Ko'rib turganingizdek, bajarilgan topshiriqlar soni faqat grafikning birinchi darajasini, ya'ni ishga tushirish vazifasining o'zini va u bevosita bog'liq bo'lgan vazifalarni hisobga oladi, ya'ni , sinflar. Bu erda sinflar bog'liq bo'lgan vazifalar hisobga olinmaydi (garchi ular sinflar topshirig'i bajarilganda bajarilsa ham). Vazifalar haqida ham o'qishingiz kerak:
Gradle-ga qisqacha kirish - 8

Bog'liqlar

Har qanday qurish tizimining asosiy vazifalaridan biri bu bog'liqliklarni boshqarish, ya'ni loyihamizga qaysi kutubxonalar/ramkalar kerak. Qurilish tizimi ularning kerakli vaqtda mavjudligini ta'minlashi va ilovamizning yakuniy artefaktini to'g'ri tarzda yig'ishi kerak. Odatiy bo'lib, java-ilovasi uchun gradle init-dan so'ng, biz qurish skriptida quyidagi tarkibni ko'ramiz:
dependencies {
    implementation 'com.google.guava:guava:26.0-jre'
    testImplementation 'junit:junit:4.12'
}
Bu erda biz nima bog'layotganimiz darhol aniq bo'ladi. Ammo ba'zi bir tushunchasiz, amalga oshirish va testImplementatsiya nima ekanligi aniq emas? Bu erda biz yana Gradle hujjatlariga murojaat qilishimiz kerak, chunki Gradle hujjatlari yaxshi yozilgan. U " Tobelik konfiguratsiyasini boshqarish " deb ataladi. Hujjatlarda ta'kidlanganidek, har bir qaramlik ma'lum bir doirada - bu qaramlik mavjud bo'lgan hududda e'lon qilinadi. Ushbu qamrov ba'zi konfiguratsiyalar bilan belgilanadi, ularning har biri o'ziga xos nomga ega. Ko'pgina Gradle plaginlari oldindan belgilangan konfiguratsiyalarni qo'shishi ham qiziq. Bizda qanday konfiguratsiyalar borligini bilish uchun biz ishga tushirishimiz mumkin: gradle --console plain dependencies Shu tarzda biz barcha mavjud konfiguratsiyalar va ularning bog'liqliklari ro'yxatini ko'ramiz. Biz ushbu ro'yxatni faqat mavjud konfiguratsiyalarni ko'rishimiz uchun filtrlashimiz mumkin: gradle --console plain dependencies | find " - " Biz nimadan foydalanishni qanday bilamiz? Bu yerda siz bir oz o'qishingiz kerak bo'ladi. Chunki Biz "Java" plaginidan foydalanamiz, shuning uchun uning hujjatlari va " Tobelikni boshqarish " bo'limidan boshlaylik . Bu erda biz "kompilyatsiya" deb nomlangan konfiguratsiya (aka qamrov) mavjudligini ko'ramiz va u "kompilyatsiya paytida zarur bo'lgan qaramlik" degan ma'noni anglatadi. Ammo keyin u amalga oshirish bilan almashtirildi (ingliz tilida almashtirildi). O'zgartirish haqida ko'proq ma'lumotni " API va dasturni ajratish " bo'limida o'qishingiz mumkin . Ma'lum bo'lishicha, bu qaramlik "sinf yo'lini kompilyatsiya qilish" da bo'ladi. Ammo ba'zida biz qaramligimizni yakuniy artefaktga kiritishni xohlaymiz. Nima uchun? Misol uchun, bizda kerakli barcha narsalarni o'z ichiga olishi kerak bo'lgan bajariladigan kavanoz bo'ladi. Keyin nima qilishimiz kerak? Birinchidan, "qutidan tashqarida" bunday yordam yo'q (ya'ni sukut bo'yicha, hech qanday qo'shimcha harakatlarsiz). Bu har bir kishi arxivni o'ziga xos tarzda yig'ishni xohlashi va Gradle minimalist bo'lishga harakat qilishi bilan izohlanadi. Shuningdek, biz jar arxivlarini sinf yo'lida ishlata olmaymiz (kodda qo'shimcha manipulyatsiyalarsiz), chunki u shunday ishlamaydi ( batafsil ma'lumot uchun " Oracle: JAR faylining sinf yo'liga sinflar qo'shish " ga qarang). Shuning uchun, eng chiroyli yo'l qurilish skriptidagi quyidagi koddir:
jar {
    manifest {
        attributes 'Main-Class': 'jrgradle.App'
    }
    from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
Jar vazifa sozlamalarida biz jar fayli manifestiga nima qo'shilishini belgilaymiz (qarang: " Oracle: Ilovaning kirish nuqtasini o'rnatish "). Va keyin biz kompilyatsiya qilish uchun zarur bo'lgan barcha bog'liqliklar kavanozga kiritilishini aytamiz. Muqobil variant - " Gradle Shadow Plugin " dan foydalanish . Bu murakkab tuyulishi mumkin, ammo boshqa plaginlar hayotni osonlashtirishi mumkin. Masalan, veb-ilovani yaratishda (oddiy ishlaydigan java ilovasidan farqli o'laroq) biz maxsus plagindan foydalanamiz - “ Gradle War Plugin ”, u boshqacha xatti-harakatga ega va bizning hayotimiz u erda osonroq bo'ladi (barcha kerakli bog'liqliklar bo'ladi). plaginning o'zi tomonidan alohida maxsus katalogga joylashtirilishi mumkin.Bunday ish veb-ilovalar qanday tuzilishi kerakligi bilan tartibga solinadi.Lekin bu butunlay boshqacha hikoya).
Gradle-ga qisqacha kirish - 9

Natijalar

Gradle - loyihani qurish tizimlari uchun ajoyib tanlov. Bu bahor va Hibernate kabi taniqli loyihalarni ishlab chiquvchilar tomonidan qo'llanilishi bilan tasdiqlanadi. Yuqorida faqat eng asosiy narsalar muhokama qilindi. Ularning orqasida ishlab chiquvchilarga ega bo'lgan millionlab xususiyatlar va imkoniyatlar yashiringan. Gradle, shuningdek, ushbu sharhda ko'rilmagan ko'p modulli loyihalarni yaratishni qo'llab-quvvatlaydi, ammo Gradlening o'zi ajoyib qo'llanmaga ega: " Ko'p loyihali tuzilmalarni yaratish ". Umid qilamanki, ushbu sharh Gradle hujjatlari 5+ da yozilganligini ko'rsatdi va agar siz qaerga qarashni tushunsangiz, kerakli narsani osongina topishingiz mumkin. Va bu siz asoslarni tushunganingizda keladi. Bundan tashqari, Gradle-da ajoyib darsliklar mavjud. Gradle yordamida yana nimani ko'rishingiz mumkin bo'lgan kichik ro'yxat bilan tugatmoqchiman:
Gradle-ga qisqacha kirish - 10
#Viacheslav
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION