JavaRush /Java блогу /Random-KY /Gradle менен тез таанышуу
Viacheslav
Деңгээл

Gradle менен тез таанышуу

Группада жарыяланган

Киришүү

Бул кароонун темасы Gradle автоматтык куруу системасы болот. Англис тorнде куруу системалары Build Tools деп аталат . Gradle менен тез таанышуу - 1Бул эмне үчүн керек? Java'да долбоорлорду кол менен куруу - бул өтө көп эмгекти талап кылган процесс. Долбоор керек болгон жана долбоор көз каранды болгон китепканаларды жана алHowтарды туура көрсөтүү зарыл. Бул жерден сиз Habré жөнүндө эң сонун макаланы окуй аласыз: " Java менен буйрук сабында иштөө ." Эртеби, кечпи, сиз бул процессти автоматташтыруу үчүн кээ бир скрипттерди түзө баштайсыз. Эми дүйнө жүзүндөгү бардык иштеп чыгуучулар муну жасайт деп элестетиңиз жана ар бир адам өз долбоору үчүн кимдир бирөө жазганын кайра жазат. Анан бул процессти автоматташтырган долбоордун монтаждоо системалары пайда болду. Кошумчалай кетсек, алар бир жагынан долбоорду өзүңүз каалагандай чогултууга мүмкүнчүлүк берсе, экинчи жагынан аздыр-көптүр стандартташтырылган куралдар менен камсыз кылат. Gradle альтернативасы Maven автоматташтырылган куруу системасы болуп саналат. Бул эки монтаждык система, бир жагынан, айырмаланат, бирок экинчи жагынан, алар бир катар окшоштуктарга ээ. Gradle веб-сайтында бул тема боюнча материал бар: " Мэйвенден Градлга көчүү ". Бул окуу куралында айтылгандай, Gradle жана Maven долбоорду кантип курууга башкача көз карашта. Gradle бири-биринен көз каранды боло турган тапшырмалардын графигине негизделген. Тапшырмалар кандайдыр бир ишти аткарат. Maven белгилүү бир фазалардын моделин колдонот, аларга белгилүү бир "максаттар" тиркелет. Бул максаттар кээ бир иштер аткарылат. Бирок, бул ар кандай ыкмалар менен, эки куруу тутуму бирдей конвенцияны карманат жана көз карандылыкты башкаруу окшош. Gradle колдонууну баштоо үчүн, аны жүктөп алышыңыз керек. Google же Яндекс биз "Gradle Build Tool" киребиз жана биринчи жыйынтыгында биз расмий сайтын көрүп: https://gradle.org . Негизги Gradle барагында Gradle documentтерине алып баруучу "Документтер" тексти бар шилтеме бар . Биринчиден, биз Gradleди орнотушубуз керек (Орнотуу), ошондуктан биз documentтердин " Gradle орнотуу " бөлүмүнө кызыкдарбыз . Көптөгөн орнотуу ыкмалары бар, анын ичинде "эски мода" ыкмасы, б.а. кол менен (« Кол менен орнотуу »). Көрсөтмөлөргө ылайык, gradle-5.1.1-bin.zip сыяктуу аталышка ээ болгон “ бинардык гана ” түрүндөгү файлды жүктөп алыңыз. Андан кийин, архивди ачып, нускамаларга ылайык PATH чөйрө өзгөрмөсүн конфигурациялаңыз. Эң негизгиси, көрсөтмөлөрдү аткаргандан кийин, команда gradle -vорнотулган Gradle versionсын көрсөтөт. Жайгашкан жерди аныктоодо система сиз каалаган жерден эмес, Gradleди табат деген көйгөй болушу мүмкүн. Ошондуктан, Windowsта сиз жасай аласыз (*nixте аналогдор бар): for %i in (gradle.bat) do @echo. %~$PATH:i Эми, балким, биз тааныша баштасак болот.
Gradle менен тез таанышуу - 2

Gradle долбоорун баштоо

Мен Gradle тапшырма деп аталган тапшырмаларды аткаруу жөнүндө экенин дароо белгилеп кетким келет (мен аларды тапшырма деп атайм). Тапшырмалар ар кандай плагиндер менен камсыз кылынат . Мен сизге расмий documentациядагы плагиндер жөнүндө көбүрөөк окууну сунуштайм: " Gradle Plugins колдонуу ". Gradle орнотулганда ар дайым жеткorктүү болгон "Негизги плагиндердин" топтому бар. Бул плагиндердин ар кандай категориялары бар, бирок биз " Коммуналдык " категориясына кызыкдарбыз . Бул топтом Gradle долбоорун инициализациялоо үчүн тапшырмаларды берген " Build Init Plugin " плагинин камтыйт. Биз долбоордун түрүн түзүүгө кызыкдарбыз: " java-applications ". Келгиле, Gradle тапшырмасын аткаралы: gradle init --type java-application Келгиле, кээ бир суроолорго жооп берели, мисалы, Groovy DSL (Gradle үчүн тапшырманын стандарттык сүрөттөмө тor) жана JUnit тестирлөө алHowтарын колдонгубуз келет (бул тууралуу башка кароодо сүйлөшөбүз). Түзүлгөндөн кийин биз төмөнкү файлдар топтомун алабыз:
Gradle менен тез таанышуу - 3
Биринчиден, инициализациялоодон кийин биз Gradle versionбыз үчүн алдын ала конфигурацияланган атайын орогучту алабыз - бул атайын скрипт. Мен сизге бул тууралуу расмий documentациядан кененирээк окууну сунуштайм - " The Gradle Wrapper ". Экинчиден, биз Gradle Build Script - build.gradle файлын көрөбүз. Бул биздин долбоор кайсы китепканаларды жана алHowтарды колдоноорун, кайсы плагиндерди долбоорго туташтыруу керектигин жана ар кандай тапшырмаларды сүрөттөгөн негизги файл. Мен сизге бул файл тууралуу кененирээк расмий documentациядан окууну сунуштайм: " Build Script Basics ".
Gradle менен тез таанышуу - 4

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

Эгерде биз азыр Build Scriptтин мазмунун карай турган болсок, анда биз плагиндер бөлүмүн көрөбүз:
plugins {
    id 'java'
    id 'application'
}
Булар биз мурда айткан плагиндер. Ал эми плагиндер бар болсо, анда азыр бизге жеткorктүү болгон тапшырмалар бар. Биз 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де кирүү жөнүндө көбүрөөк маалымат алуу үчүн, мен сизге расмий documentацияга кайрылыңыз: " Gradle Logging ". Көрүнүп тургандай, класстардын тапшырмасы өткөрүлүп жиберилди, анткени ал UP-TO-DATE , башкача айтканда, абал учурдагы, эч нерсе кылуунун кереги жок, ошондуктан эч кандай аракеттер болгон жок. Себеби, демейки боюнча Gradleде " Заманбап текшерүүлөр " же кошумча түзүлүш деп аталган. Бул механизм жөнүндө көбүрөөк Gradle documentтеринен окуй аласыз: " Заманбап текшерүүлөр (AKA Incremental Build) ". Бирок бул механизмди --rerun-tasks желегин көрсөткөн тапшырманы аткаруу менен өчүрүүгө болот. Мисалы, gradle run --rerun-tasks. Андан кийин биз көрөбүз: 2 аткарылуучу тапшырма: 2 аткарылган Көрүнүп тургандай, аткарылган тапшырмалардын саны графиктин биринчи деңгээлин гана эске алат, башкача айтканда, аткаруу тапшырмасынын өзүн жана ал түздөн-түз көз каранды болгон тапшырмаларды, б.а. , класстар. Класстар көз каранды болгон тапшырмалар бул жерде эсептелбейт (бирок алар класстардын тапшырмасы аткарылганда аткарылат). Ошондой эле тапшырмалар жөнүндө окуу керек:
Gradle менен тез таанышуу - 8

Көз карандылыктар

Ар кандай куруу тутумунун негизги милдеттеринин бири көз карандылыкты башкаруу, башкача айтканда, биздин долбоорго керектүү китепканалар/алHowтар. Куруу системасы алардын керектүү убакта жеткorктүү болушун камсыздап, биздин колдонмонун акыркы артефактын туура жол менен чогултушу керек. Демейки боюнча, java колдонмосу үчүн gradle init кийин, биз куруу скриптинде төмөнкү мазмунду көрөбүз:
dependencies {
    implementation 'com.google.guava:guava:26.0-jre'
    testImplementation 'junit:junit:4.12'
}
Бул жерде биз эмнени байланыштырып жатканыбыз дароо айкын көрүнүп турат. Бирок, кандайдыр бир түшүнүгү жок, бул ишке ашыруу жана testImplementation деген эмне түшүнүксүз? Бул жерде биз Gradle documentтерине кайрылышыбыз керек, анткени Gradle documentтери жакшы жазылган. Ал " Көз карандылык конфигурацияларын башкаруу " деп аталат. Документте айтылгандай, ар бир көз карандылык белгилүү бир чөйрөдө - бул көз карандылык жеткorктүү боло турган аймак менен жарыяланат. Бул масштаб кандайдыр бир конфигурация менен белгиленет, алардын ар бири уникалдуу аталышка ээ. Көптөгөн Gradle плагиндери алдын ала аныкталган конфигурацияларды кошкону дагы кызыктуу. Бизде кандай конфигурациялар бар экенин билүү үчүн биз иштете алабыз: gradle --console plain dependencies Ушундай жол менен биз бардык жеткorктүү конфигурациялардын жана алардын көз карандылыктарынын тизмесин көрөбүз. Биз бул тизмени чыпкалап алабыз, ошондо биз жеткorктүү конфигурацияларды гана көрөбүз: gradle --console plain dependencies | find " - " Эмнени колдонууну кайдан билебиз? Бул жерде бир аз окуу керек. Анткени Биз "Java" плагинин колдонобуз, андыктан анын documentтеринен жана " Көз карандылыкты башкаруу " бөлүмүнөн баштайлы . Бул жерде биз мурда "компиляция" деп аталган конфигурация (кошумча ака) болгонун жана ал "компиляция учурунда зарыл болгон көз карандылыкты" билдиргенин көрөбүз. Бирок кийин аны ишке ашыруу менен алмаштырылган (англисче алмаштырылган). Алмаштыруу жөнүндө кененирээк " 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 " колдонуу. Бул татаал сезorши мүмкүн, бирок башка плагиндер жашоону жеңилдетет. Мисалы, веб-тиркемени түзүүдө (кадимки иштеп жаткан java тиркемесинен айырмаланып) биз атайын плагинди колдонобуз - “ Gradle War Plugin ”, анын жүрүм-туруму башкача жана ал жерде жашообуз жеңилдейт (бардык керектүү көз карандылыктар плагиндин өзү тарабынан өзүнчө атайын каталогго коюлушу керек.Мындай иш веб-тиркемелердин структурасы менен жөнгө салынат.Бирок бул таптакыр башка окуя).
Gradle менен тез таанышуу - 9

Жыйынтыктар

Gradle долбоор куруу системалары үчүн мыкты тандоо болуп саналат. Бул жаз жана Hibernate сыяктуу белгилүү долбоорлорду иштеп чыгуучулар тарабынан колдонулуп жаткандыгы менен тастыкталат. Жогоруда эң негизги нерселер гана талкууланды. Алардын артында иштеп чыгуучулар ээ болгон миллиондогон өзгөчөлүктөр жана мүмкүнчүлүктөр жашырылган. Gradle ошондой эле бул кароодо камтылбаган көп модулдуу долбоорлорду түзүүнү колдойт, бирок Gradleдин өзүндө эң сонун окуу куралы бар: “ Көп долбоорлорду түзүү ”. Бул карап чыгуу Gradle documentтери 5+ даражасында жазылганын көрсөттү деп үмүттөнөм жана эгер сиз каяктан издөө керектигин түшүнсөңүз, керектүү нерсени оңой таба аласыз. Жана бул сиз негиздерин түшүнгөндө келет. Мындан тышкары, Gradle сонун окуу куралдары бар. Мен Gradle аркылуу дагы эмнелерди көрө ала турганыңыздын чакан тизмеси менен аяктагым келет:
Gradle менен тез таанышуу - 10
#Вячеслав
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION