JavaRush /Java блогы /Random-KK /Gradle-ге қысқаша кіріспе
Viacheslav
Деңгей

Gradle-ге қысқаша кіріспе

Топта жарияланған

Кіріспе

Бұл шолудың тақырыбы Gradle автоматты құрастыру жүйесі болады. Ағылшын тілінде құрастыру жүйелері Build Tools деп аталады . Gradle-ге қысқаша кіріспе - 1Бұл не үшін қажет? Java тілінде жобаларды қолмен құру - бұл өте көп еңбекті қажет ететін процесс. Жобаға қажет және жоба тәуелді болатын кітапханалар мен фреймворктарды дұрыс көрсету қажет. Мұнда сіз Хабре туралы тамаша мақаланы оқи аласыз: « Java-мен пәрмен жолында жұмыс істеу ». Ерте ме, кеш пе, сіз осы процесті автоматтандыру үшін кейбір сценарийлерді жасай бастайсыз. Енді елестетіп көріңізші, бүкіл әлемдегі барлық әзірлеушілер мұны жасайды және барлығы біреудің өз жобасы үшін жазғанын қайта жазады. Содан кейін бұл процесті автоматтандыратын жобаны құрастыру жүйелері пайда болды. Сонымен қатар, олар бір жағынан жобаны өзіңіз қалағандай құрастыруға мүмкіндік берсе, екінші жағынан азды-көпті стандартталған құралдармен қамтамасыз етеді. Gradle-ге балама Maven автоматтандырылған құрастыру жүйесі болып табылады. Бұл екі құрастыру жүйесі, бір жағынан, әртүрлі, бірақ екінші жағынан, олардың бірқатар ұқсастықтары бар. Бұл тақырып бойынша Gradle веб-сайтында материал бар: « Мэйвенден Градлға көшу ». Осы оқулықта айтылғандай, Gradle және Maven жобаны қалай құруға қатысты басқаша көзқарасқа ие. Gradle бір-біріне тәуелді болуы мүмкін тапсырмалар графигіне негізделген. Тапсырмалар қандай да бір жұмыс түрін орындайды. Maven белгілі бір «мақсаттар» қосылған белгілі бір кезеңдердің үлгісін пайдаланады. Бұл мақсаттар кейбір жұмыстардың орындалатын жері. Дегенмен, осы әртүрлі тәсілдермен екі құрастыру жүйесі де бірдей конвенцияны ұстанады және тәуелділікті басқару ұқсас. Gradle пайдалануды бастау үшін оны жүктеп алу керек. Google немесе Yandex-те біз «Gradle Build Tool» енгіземіз және бірінші нәтижелерде біз ресми веб-сайтты көреміз: https://gradle.org . Gradle негізгі бетінде Gradle құжаттамасына апаратын «Құжаттар» мәтіні бар сілтеме бар . Біріншіден, бізге Gradle орнату (Орнату) керек, сондықтан бізді құжаттаманың « Gradle орнату » бөлімі қызықтырады . Көптеген орнату әдістері бар, соның ішінде «ескі» әдіс, яғни. қолмен (« Қолмен орнату »). Нұсқауларға сәйкес, gradle-5.1.1-bin.zip сияқты атауы болатын « тек екілік » түріндегі файлды жүктеп алыңыз. Содан кейін мұрағатты орауыштан шығарып, нұсқауларға сәйкес PATH ортасының айнымалы мәнін конфигурациялаңыз. Ең бастысы, нұсқауларды орындағаннан кейін команда gradle -vорнатылған Gradle нұсқасын көрсетеді. Орынды анықтау кезінде жүйе сіз қалаған жерде емес Gradle-ді табатын мәселе болуы мүмкін. Сондықтан Windows жүйесінде сіз жасай аласыз (*nix-те аналогтар бар): for %i in (gradle.bat) do @echo. %~$PATH:i Енді, мүмкін, біз танысуды бастай аламыз.
Gradle-ге қысқаша кіріспе - 2

Gradle жобасын инициализациялау

Мен Gradle тапсырмалар деп аталатын тапсырмаларды орындау туралы екенін бірден атап өткім келеді (мен оларды тапсырмалар деп атаймын). Тапсырмалар әртүрлі плагиндермен қамтамасыз етілген . Мен сізге плагиндер туралы қосымша ақпаратты ресми құжаттамадан оқуға кеңес беремін: « Gradle плагиндерін пайдалану ». Gradle орнатылған кезде әрқашан қол жетімді болатын «Негізгі плагиндер» жиынтығы бар. Бұл плагиндердің әртүрлі санаттары бар, бірақ бізді « Утorта » санаты қызықтырады . Бұл жинақта Gradle жобасын инициализациялауға арналған тапсырмаларды қамтамасыз ететін " Build Init Plugin " плагині бар. Біз жоба түрін құруға мүдделіміз: " java-application ". Gradle тапсырмасын орындайық: gradle init --type java-application Жол бойында кейбір сұрақтарға жауап берейік, мысалы, Groovy DSL (Gradle үшін стандартты тапсырманы сипаттау тілі) және JUnit тестілеу құрылымын қолданғымыз келеді (бұл туралы басқа шолуда айтатын боламыз). Жасалғаннан кейін біз келесі файлдар жинағын аламыз:
Gradle-ге қысқаша кіріспе - 3
Біріншіден, инициализациядан кейін біз Gradle нұсқасы үшін алдын ала конфигурацияланған арнайы қаптаманы аламыз - бұл арнайы сценарий. Мен сізге бұл туралы ресми құжаттамада толығырақ оқуға кеңес беремін - « The Gradle Wrapper ». Екіншіден, біз Gradle Build Script - build.gradle файлын көреміз. Бұл жобамыз қандай кітапханалар мен фреймворктарды қолданатынын, жобаға қандай плагиндерді қосу керектігін және әртүрлі тапсырмаларды сипаттайтын негізгі файл. Мен сізге осы файл туралы толығырақ ресми құжаттамада оқуға кеңес беремін: « Сценарий негіздерін құру ».
Gradle-ге қысқаша кіріспе - 4

Плагиндер мен тапсырмалар

Енді құрастыру сценарийінің мазмұнына қарасақ, плагиндер бөлімін көреміз:
plugins {
    id 'java'
    id 'application'
}
Бұл біз бұрын айтқан плагиндер. Егер плагиндер болса, қазір бізге қол жетімді тапсырмалар бар. Біз gradle tasks пәрменін іске қосып, енді жобамен не істей алатынымызды көре аламыз:
Gradle-ге қысқаша кіріспе - 5
Мысалы, орындау арқылы gradle runбіз java қосымшамыздың негізгі класын іске қосамыз:
Gradle-ге қысқаша кіріспе - 6
Көріп отырғанымыздай, төменде де солай жазылған.Бұл 2 actionable tasks: 1 executed, 1 up-to-date нені білдіреді? Бұл барлығы 2 тапсырманың орындалғанын білдіреді: Оның үстіне 1 нақты орындалды, ал біреуі орындалмады, себебі... қазіргі заманға сай, яғни мемлекет қазіргі және ешнәрсе жасалған жоқ. Біз «Құрғақ іске қосу» деп аталатын әрекетті орындай аламыз: gradle run -m Осы команданы орындаймыз, біз іске қосу тапсырмасын орындау үшін қандай тапсырмалар орындалатынын көреміз:
Gradle-ге қысқаша кіріспе - 7
Көріп отырғанымыздай, барлығы 4 тапсырма орындалды: іске қосу орындалмас бұрын, ол тәуелділік тапсырмаларының сыныптарын орындады. Сыныптардың өзінде 2 тәуелділік бар, сондықтан ол compileJava және processResources орындады. Тапсырманы орындаған кезде, біз оны журналдардың белгілі бір деңгейін қарау кезінде орындай аламыз (жүргізу деңгейі қаншалықты маңызды хабарларды көргіміз келетінін анықтайды). Мысалы, біз жасай аламыз gradle run -i. Бұл сондай-ақ бізге мынадай ақпараттық хабарламаларды көрсетеді:
Task :classes UP-TO-DATE
Skipping task ':classes' as it has no actions.
Gradle жүйесінде жүйеге кіру туралы қосымша ақпарат алу үшін мен сізге ресми құжаттамаға жүгінуге кеңес беремін: " Gradle Logging ". Көріп отырғанымыздай, сыныптар тапсырмасы өткізіліп жіберілді, себебі ол ЖАҢАЛЫҚ , яғни күй ағымдағы, ештеңе істеудің қажеті жоқ, сондықтан ешқандай әрекеттер болмады. Себебі, әдепкі бойынша Gradle-де « Жаңартылған тексерулер » немесе қосымша құрастыру деп аталады. Бұл механизм туралы толығырақ Gradle құжаттамасынан оқи аласыз: " Жаңартылған тексерулер (AKA Incremental Build) ". Бірақ бұл механизмді --rerun-tasks жалаушасын көрсететін тапсырманы орындау арқылы өшіруге болады. Мысалы, gradle run --rerun-tasks. Содан кейін біз көреміз: 2 орындалатын тапсырма: 2 орындалды Көріп отырғаныңыздай, орындалған тапсырмалардың саны тек графиктің бірінші деңгейін ескереді, яғни орындалатын тапсырманың өзі және ол тікелей тәуелді болатын тапсырмалар, яғни , сыныптар. Мұнда сыныптар тәуелді тапсырмалар есептелмейді (бірақ олар сыныптар тапсырмасы орындалған кезде орындалады). Сондай-ақ тапсырмалар туралы оқу керек:
Gradle-ге қысқаша кіріспе - 8

Тәуелділіктер

Кез келген құрастыру жүйесінің негізгі міндеттерінің бірі тәуелділіктерді басқару болып табылады, яғни біздің жобаға қажет кітапханалар/фремворктар. Құрастыру жүйесі олардың қажетті уақытта қол жетімді болуын қамтамасыз етуі және біздің қолданбаның соңғы артефактісін дұрыс жолмен жинауы керек. Әдепкі бойынша, java қолданбасы үшін gradle init кейін, құрастыру сценарийінде келесі мазмұнды көреміз:
dependencies {
    implementation 'com.google.guava:guava:26.0-jre'
    testImplementation 'junit:junit:4.12'
}
Мұнда не байланыстыратынымыз бірден анық болады. Бірақ қандай да бір түсініксіз іске асыру және тестілеудің не екені белгісіз? Мұнда біз қайтадан Gradle құжаттамасына жүгінуіміз керек, өйткені Gradle құжаттамасы жақсы жазылған. Ол « Тәуелділік конфигурацияларын басқару » деп аталады. Құжаттамада айтылғандай, әрбір тәуелділік белгілі бір ауқыммен жарияланады - бұл тәуелділік қол жетімді болатын аймақ. Бұл аумақ кейбір конфигурациямен белгіленеді, олардың әрқайсысының бірегей атауы бар. Көптеген Gradle плагиндері алдын ала анықталған конфигурацияларды қосатыны қызықты. Бізде қандай конфигурациялар бар екенін білу үшін біз іске қоса аламыз: gradle --console plain dependencies Осылайша біз барлық қол жетімді конфигурациялар мен олардың тәуелділіктерінің тізімін көреміз. Біз бұл тізімді тек қол жетімді конфигурацияларды көру үшін сүзе аламыз: gradle --console plain dependencies | find " - " Нені пайдалану керектігін қайдан білеміз? Мұнда аздап оқу керек. Өйткені Біз «Java» плагинін қолданамыз, сондықтан оның құжаттамасынан және « Тәуелділікті басқару » бөлімінен бастайық . Мұнда біз бұрын «компиляция» деп аталатын конфигурацияның (қосалқы ауқым) болғанын көреміз және ол «құрастыру кезінде қажет тәуелділік» дегенді білдіреді. Бірақ содан кейін ол (ағылшын тілінде ауыстырылды) енгізумен ауыстырылды. Ауыстыру туралы толығырақ « API және іске асыруды бөлу » бөлімінде оқи аласыз . Бұл тәуелділік «компиляциялық сынып жолында» болатыны белгілі болды. Бірақ кейде біз тәуелділігіміздің соңғы артефактқа қосылғанын қалаймыз. Не үшін? Мысалы, бізде қажетті барлық нәрсе болуы керек орындалатын банка болады. Сонда не істеуіміз керек? Біріншіден, мұндай қолдау «қораптан тыс» жоқ (яғни, әдепкі бойынша, ешқандай қосымша әрекеттерсіз). Бұл әркім мұрағатты өзінше жинағысы келетінімен түсіндіріледі, ал Градл минималистік болуға тырысады. Біз сондай-ақ класс жолында jar мұрағатын пайдалана алмаймыз (codeтағы қосымша манипуляцияларсыз), себебі ол осылай жұмыс істемейді ( толығырақ мәлімет алу үшін « Oracle: JAR файлының сынып жолына сыныптарды қосу » бөлімін қараңыз). Сондықтан, ең әдемі әдіс - құрастыру сценарийіндегі келесі code:
jar {
    manifest {
        attributes 'Main-Class': 'jrgradle.App'
    }
    from configurations.compileClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
jar тапсырмасының параметрлерінде біз jar файлының манифестіне не қосылатынын көрсетеміз (« Oracle: Қолданбаның кіру нүктесін орнату » бөлімін қараңыз). Содан кейін біз компиляцияға қажет барлық тәуелділіктер банкаға қосылады деп айтамыз. Балама нұсқасы - « Gradle Shadow Plugin » пайдалану . Бұл күрделі болып көрінуі мүмкін, бірақ басқа плагиндер өмірді жеңілдетуі мүмкін. Мысалы, веб-қосымшаны жасау кезінде (жұмыс істейтін қарапайым java қолданбасына қарағанда) біз арнайы плагинді қолданамыз - « Gradle War Plugin », оның мінез-құлқы басқаша және біздің өміріміз сонда оңайырақ болады (барлық қажетті тәуелділіктер плагиннің өзі арқылы бөлек арнайы каталогқа қоюға болады.Мұндай жұмыс веб-қосымшалардың құрылымымен реттеледі.Бірақ бұл мүлдем басқа әңгіме).
Gradle-ге қысқаша кіріспе - 9

Нәтижелер

Gradle - жобаны құру жүйелері үшін тамаша таңдау. Мұны Spring және Hibernate сияқты танымал жобаларды әзірлеушілер пайдаланатындығы растайды. Жоғарыда тек ең негізгі нәрселер талқыланды. Олардың артында әзірлеушілердің миллиондаған мүмкіндіктері мен мүмкіндіктері жасырылған. Gradle сонымен қатар бұл шолуда қарастырылмаған көп модульді жобаларды жасауды қолдайды, бірақ Gradle-дің өзінде тамаша оқу құралы бар: « Көп жобалық құрастыруларды жасау ». Бұл шолу сонымен қатар Gradle құжаттамасы 5+ деңгейінде жазылғанын көрсетті және қайда іздеу керектігін түсінсеңіз, қажет нәрсені оңай таба аласыз деп үміттенемін. Бұл сіз негіздерді түсінген кезде келеді. Сонымен қатар, Gradle-де тамаша оқу құралдары бар. Мен Gradle көмегімен тағы не көруге болатын шағын тізіммен аяқтағым келеді:
Gradle-ге қысқаша кіріспе - 10
#Вячеслав
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION