JavaRush /Java Blogu /Random-AZ /Gradle ilə qısa tanışlıq
Viacheslav
Səviyyə

Gradle ilə qısa tanışlıq

Qrupda dərc edilmişdir

Giriş

Bu baxışın mövzusu Gradle avtomatik qurma sistemi olacaq. İngilis dilində qurma sistemləri Build Tools adlanır . Gradle-a qısa giriş - 1Bu niyə lazımdır? Java-da layihələrin əl ilə qurulması kifayət qədər əmək tələb edən bir prosesdir. Layihənin ehtiyac duyduğu və layihənin asılı olduğu kitabxanaları və çərçivələri düzgün göstərmək lazımdır. Burada Habré haqqında əla məqaləni oxuya bilərsiniz: “ Komanda xəttində Java ilə işləmək .” Gec-tez bu prosesi avtomatlaşdırmaq üçün bəzi skriptlər yaratmağa başlayacaqsınız. İndi təsəvvür edin ki, dünyanın bütün tərtibatçıları bunu edir və hər kəs öz layihəsi üçün artıq kiminsə yazdığını yenidən yazır. Və sonra bu prosesi avtomatlaşdıran layihə montaj sistemləri meydana çıxdı. Bundan əlavə, onlar bir tərəfdən layihəni istədiyiniz şəkildə yığmağa imkan verir, digər tərəfdən isə sizə az-çox standartlaşdırılmış alətlər təqdim edirlər. Gradle-ə alternativ Maven avtomatlaşdırılmış quruluş sistemidir. Bu iki montaj sistemi, bir tərəfdən, fərqlidir, lakin digər tərəfdən, bir sıra oxşarlıqlara malikdir. Gradle saytında bu mövzuda material var: " Mavendən Qradla köçmək ". Bu dərslikdə deyildiyi kimi, Gradle və Maven layihənin necə qurulması ilə bağlı fərqli perspektivə malikdirlər. Gradle bir-birindən asılı ola bilən tapşırıqların qrafikinə əsaslanır. Tapşırıqlar bir növ iş görür. Maven müəyyən "məqsədlərin" əlavə olunduğu müəyyən mərhələlər modelindən istifadə edir. Bu məqsədlər bəzi işlərin görüldüyü yerdir. Bununla belə, bu fərqli yanaşmalarla hər iki qurma sistemi eyni konvensiyaya əməl edir və asılılığın idarə edilməsi oxşardır. Gradle istifadə etməyə başlamaq üçün onu yükləməlisiniz. Google və ya Yandex-də biz "Gradle Build Tool" daxil edirik və ilk nəticələrdə rəsmi veb saytı görürük: https://gradle.org . Əsas Gradle səhifəsində Gradle sənədlərinə aparan "Sənədlər" mətni ilə bir keçid var . Birincisi, biz Gradle-ni quraşdırmalıyıq (Quraşdır), ona görə də biz sənədlərin " Quraşdırma Gradle " bölməsi ilə maraqlanırıq. Bir çox quraşdırma metodu var, o cümlədən "köhnə moda" metod, yəni. əl ilə (“ Əl ilə quraşdırma ”). Təlimatlara əsasən, gradle-5.1.1-bin.zip kimi bir ada malik olan “ yalnız ikili ” tipli faylı endirin. Sonra, arxivi açın və təlimatlara uyğun olaraq PATH mühit dəyişənini konfiqurasiya edin. Əsas odur ki, təlimatları yerinə yetirdikdən sonra əmr gradle -vquraşdırılmış Gradle versiyasını göstərir. Problem ola bilər ki, yeri təyin edərkən sistem Gradle-ni istədiyiniz yerdə tapmayacaq. Buna görə də, Windows-da edə bilərsiniz (*nix-də analoqlar var): for %i in (gradle.bat) do @echo. %~$PATH:i İndi, bəlkə də, tanış olmağa başlaya bilərik.
Gradle-ə qısa giriş - 2

Gradle layihəsinin işə salınması

Dərhal qeyd etmək istərdim ki, Gradle tapşırıq adlanan tapşırıqları yerinə yetirir ( mən onları tapşırıq adlandıracağam). Tapşırıqlar müxtəlif plaginlər tərəfindən təmin edilir . Rəsmi sənədlərdə plaginlər haqqında daha çox oxumağı məsləhət görürəm: " Gradle Pluginlərindən istifadə ". Gradle quraşdırıldıqda həmişə mövcud olan "Core Plugins" dəsti var. Bu plaginlərin müxtəlif kateqoriyaları var, lakin biz " Utility " kateqoriyası ilə maraqlanırıq . Bu dəstdə Gradle layihəsinin işə salınması üçün tapşırıqları təmin edən " Build Init Plugin " plagini daxildir. Biz layihə növü yaratmaqda maraqlıyıq: " java-application ". Gəlin Gradle tapşırığını yerinə yetirək: gradle init --type java-application Yol boyu bəzi suallara cavab verək, məsələn, Groovy DSL (Gradle üçün standart tapşırıq təsviri dili) və JUnit test çərçivəsini istifadə etmək istəyirik (bu barədə başqa bir araşdırmada danışacağıq). Yaratdıqdan sonra aşağıdakı fayl dəstini alacağıq:
Gradle-ə qısa giriş - 3
Birincisi, işə salındıqdan sonra biz Gradle versiyamız üçün əvvəlcədən konfiqurasiya edilmiş xüsusi sarğı alırıq - bu xüsusi bir skriptdir. Mən sizə bu barədə daha çox rəsmi sənədlərdə oxumağı məsləhət görürəm - " The Gradle Wrapper ". İkincisi, biz Gradle Build Script - build.gradle faylını görürük. Bu, layihəmizin hansı kitabxana və çərçivələrdən istifadə etdiyini, hansı plaginlərin layihəyə qoşulması lazım olduğunu və müxtəlif tapşırıqları təsvir edən əsas fayldır. Mən sizə rəsmi sənədlərdə bu fayl haqqında daha ətraflı oxumağı məsləhət görürəm: " Skript Əsasları Yaradın ".
Gradle-ə qısa giriş - 4

Pluginlər və Tapşırıqlar

İndi Build Script-in məzmununa baxsaq, plaginlər bölməsini görəcəyik:
plugins {
    id 'java'
    id 'application'
}
Bunlar əvvəllər haqqında danışdığımız eyni plaginlərdir. Əgər plaginlər varsa, o zaman bizim üçün mövcud olan tapşırıqlar var. Biz gradle tasks əmrini işlədə və layihə ilə indi nə edə biləcəyimizi görə bilərik:
Gradle-ə qısa giriş - 5
Məsələn, icra etməklə gradle runbiz java proqramımızın əsas sinfini işə salacağıq:
Gradle-ə qısa giriş - 6
Gördüyümüz kimi aşağıda da belə yazılıb.Bu 2 actionable tasks: 1 executed, 1 up-to-date nə deməkdir? Bu o deməkdir ki, ümumilikdə 2 tapşırıq yerinə yetirilib: Üstəlik, 1-i faktiki tamamlanıb, biri isə icra olunmayıb, çünki... aktualdır, yəni dövlət indikidir və heç bir iş görülməyib. Biz "Quru qaçış" adlananı yerinə yetirə bilərik: gradle run -m Gəlin bu əmri yerinə yetirək, qaçış tapşırığını yerinə yetirmək üçün hansı tapşırıqların yerinə yetiriləcəyini görəcəyik:
Gradle-ə qısa giriş - 7
Gördüyümüz kimi, cəmi 4 tapşırıq yerinə yetirildi: qaçış yerinə yetirilməzdən əvvəl, asılılıq tapşırığı siniflərini yerinə yetirdi. Siniflərin özünün 2 asılılığı var və buna görə də o, compileJava və processResources-u icra etdi. Biz bir tapşırığı yerinə yetirərkən, müəyyən bir səviyyəli qeydlərə baxarkən onu yerinə yetirə bilərik (giriş səviyyəsi nə qədər vacib mesajları görmək istədiyimizi müəyyənləşdirir). Məsələn, edə bilərik gradle run -i. Bu, həmçinin bizə aşağıdakı kimi məlumat mesajlarını göstərəcək:
Task :classes UP-TO-DATE
Skipping task ':classes' as it has no actions.
Gradle-də giriş haqqında ətraflı məlumat üçün sizə rəsmi sənədlərə müraciət etməyi məsləhət görürəm: " Gradle Logging ". Gördüyümüz kimi, UP-TO-DATE olduğu üçün siniflər tapşırığı atlandı , yəni vəziyyət aktualdır, heç bir şey etmək lazım deyil, buna görə heç bir hərəkət yox idi. Bunun səbəbi, defolt olaraq Gradle-də " Yenilənmiş yoxlamalar " və ya sözdə artımlı quruluşa sahib olmasıdır. Bu mexanizm haqqında daha çox Gradle sənədlərində oxuya bilərsiniz: " Müasir yoxlamalar (AKA Artan Quraşdırma) ". Lakin bu mexanizm --rerun-tasks bayrağını təyin edən tapşırığı yerinə yetirməklə söndürülə bilər. Misal üçün, gradle run --rerun-tasks. Sonra görəcəyik: 2 icra edilə bilən tapşırıq: 2 yerinə yetirilən Gördüyünüz kimi, yerinə yetirilən tapşırıqların sayı qrafikin yalnız birinci səviyyəsini, yəni icra tapşırığının özünü və birbaşa asılı olduğu tapşırıqları nəzərə alır, yəni. , siniflər. Siniflərin asılı olduğu tapşırıqlar burada sayılmır (baxmayaraq ki, onlar sinif tapşırığı yerinə yetirildikdə yerinə yetirilir). Tapşırıqlar haqqında da oxumalısınız:
Gradle-ə qısa giriş - 8

Asılılıqlar

Hər hansı bir qurma sisteminin əsas vəzifələrindən biri asılılıqları idarə etməkdir, yəni layihəmizə hansı kitabxanalar/çərçivələr lazımdır. Quraşdırma sistemi onların lazımi anda mövcud olmasını təmin etməli və tətbiqimizin son artefaktını düzgün şəkildə yığmalıdır. Varsayılan olaraq, java tətbiqi üçün gradle init-dən sonra qurma skriptində aşağıdakı məzmunu görəcəyik:
dependencies {
    implementation 'com.google.guava:guava:26.0-jre'
    testImplementation 'junit:junit:4.12'
}
Burada nəyi bağladığımız dərhal aydın olur. Ancaq müəyyən bir anlayış olmadan, tətbiqin və testin tətbiqinin nə olduğu aydın deyil? Burada yenidən Gradle sənədlərinə müraciət etməliyik, çünki Gradle sənədləri yaxşı yazılmışdır. Bu, " Asılılıq konfiqurasiyalarının idarə edilməsi " adlanır. Sənədlərdə qeyd edildiyi kimi, hər bir asılılıq müəyyən bir əhatə dairəsi ilə elan edilir - bu asılılığın mövcud olacağı sahə. Bu əhatə dairəsi hər birinin özünəməxsus adı olan bəzi konfiqurasiya ilə təyin olunur. Bir çox Gradle plaginlərinin əvvəlcədən təyin edilmiş konfiqurasiyaları əlavə etməsi də maraqlıdır. Hansı konfiqurasiyalara sahib olduğumuzu öyrənmək üçün işləyə bilərik: gradle --console plain dependencies Bu yolla biz bütün mövcud konfiqurasiyaların və onların asılılıqlarının siyahısını görəcəyik. Biz bu siyahını süzgəcdən keçirə bilərik ki, yalnız mövcud konfiqurasiyaların özlərini görək: gradle --console plain dependencies | find " - " Nədən istifadə edəcəyimizi necə bilirik? Burada bir az oxumalı olacaqsınız. Çünki Biz "Java" plaginindən istifadə edirik, ona görə də onun sənədləri və " Asılılığın idarə edilməsi " bölməsindən başlayaq . Burada görürük ki, əvvəllər “kompilyasiya” adlı bir konfiqurasiya (məsələn, əhatə dairəsi) var idi və bu, “kompilyasiya zamanı lazım olan asılılıq” demək idi. Lakin sonra (İngilis dilində əvəzlənmiş) tətbiqi ilə əvəz olundu. Dəyişdirmə haqqında daha ətraflı " API və tətbiqin ayrılması " bölməsində oxuya bilərsiniz . Məlum oldu ki, bu asılılıq “sinf yolunu tərtib etmək” üzərində olacaq. Ancaq bəzən biz asılılığımızın son artefaktda yer almasını istəyirik. Nə üçün? Məsələn, lazım olan hər şeyi özündə ehtiva edən icra edilə bilən bir bankamız olacaq. Bəs onda nə etməliyik? Birincisi, "qutudan kənar" belə bir dəstək yoxdur (yəni, standart olaraq, heç bir əlavə hərəkət etmədən). Bu onunla izah olunur ki, hər kəs arxivi özünəməxsus şəkildə toplamaq istəyir və Qradl minimalist olmağa çalışır. Biz həmçinin jar arxivlərini sinif yolunda istifadə edə bilmərik (kodda əlavə manipulyasiyalar olmadan), çünki bu şəkildə işləmir (Ətraflı məlumat üçün " Oracle: JAR Faylının Sinif Yoluna Siniflərin əlavə edilməsi " bölməsinə baxın). Buna görə də, ən gözəl yol tikinti skriptindəki aşağıdakı koddur:
jar {
    manifest {
        attributes 'Main-Class': 'jrgradle.App'
    }
    from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
Jar tapşırığı parametrlərində biz jar faylı manifestinə nələrin əlavə olunacağını müəyyənləşdiririk (bax: “ Oracle: Proqramın Giriş Nöqtəsinin qurulması ”). Və sonra deyirik ki, tərtib üçün lazım olan bütün asılılıqlar bankaya daxil ediləcək. Alternativ olaraq " Gradle Shadow Plugin " istifadə etmək olar. Bu mürəkkəb görünə bilər, lakin digər plaginlər həyatı asanlaşdıra bilər. Məsələn, veb tətbiqi yaradarkən (adi işləyən java proqramından fərqli olaraq) biz xüsusi bir plaqindən istifadə edəcəyik - “ Gradle War Plugin ”, fərqli davranışa malikdir və orada həyatımız daha asan olacaq (bütün zəruri asılılıqlar plaqinin özü tərəfindən ayrıca xüsusi qovluğa yerləşdirilməlidir.Belə iş veb proqramların necə qurulacağı ilə tənzimlənir.Lakin bu tamam başqa bir hekayədir).
Gradle-ə qısa giriş - 9

Nəticələr

Gradle layihə qurma sistemləri üçün əla seçimdir. Bu, Spring və Hibernate kimi məşhur layihələrin tərtibatçıları tərəfindən istifadə edilməsi ilə təsdiqlənir. Yuxarıda yalnız ən əsas şeylər müzakirə edildi. Onların arxasında tərtibatçıların malik olduğu bir milyon xüsusiyyət və imkan gizlənir. Gradle, bu baxışda əhatə olunmayan çox modullu layihələrin yaradılmasını da dəstəkləyir, lakin Gradle-in özündə əla dərslik var: “ Çox layihəli quruluşların yaradılması ”. Ümid edirəm ki, bu baxış Gradle sənədlərinin 5+ səviyyəsində yazıldığını nümayiş etdirdi və hara baxmaq lazım olduğunu başa düşsəniz, sizə lazım olanı asanlıqla tapa bilərsiniz. Və bu, əsasları başa düşdüyünüz zaman gələcək. Bundan əlavə, Gradle-ın əla dərslikləri var. Gradle istifadə edərək başqa nə görə biləcəyinizin kiçik bir siyahısı ilə bitirmək istərdim:
Gradle-ə qısa giriş - 10
#Viaçeslav
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION