Shahriyar Aghajani
Shahriyar Aghajani
خواندن ۳ دقیقه·۴ سال پیش

Kotlin DSL gradle

حتما تاحالا براتون پیش اومده که با سینتکس های نا آشنای groovy در gradle کار کنید.

مهاجرت به kotlin DSL که مخفف ( Domain Specific Language ) هم باعث درک راحت تر سینتکس ها میشه و هم شکل و شمایل گریدل ها و لایبراری های شما تمیزتر و خواناتر میشه.


Gradle & Kotlin
Gradle & Kotlin


بیاید دستورات groovy در گریدل رو تبدیل کنیم به اسکریپت های کاتلین که برای همه آشنا تر هست.


چرا از groovy scripts به kotlin scripts بریم؟:

۱- ارور زمان کامپایل

۲- استفاده از auto completion توسط ide

۳- درک راحت تر نسبت به اسکریپت های groovy


خلاص مراحل:

۱- به طور خلاصه میخوایم یک ماژول برای dsl اضافه کنیم

۲- و در ادامه تمام فایل هایی که پسوندشون

*.gradle

هست رو به

*.gradle.kts

ریفکتور کنیم ( kts چیه؟ : A script is a Kotlin source file )


۳- و بجای ' از " استفاده کنیم (single quotes replaced by double quotes)

۴- گریدل نسخه ۵ به بالا استفاده کنیم.


شروع

اول از همه در root پروژه خودتون یک directory جدید با این اسم ایجاد کنید:

buildSrc

افزودن buildSrc به root پروژه
افزودن buildSrc به root پروژه

همان طور که میبینید هم سطح ماژول app قرار داره، و البته چون من قبلا ایجادش کردم و چندتا کار دیگه م روش انجام دادم یکمی شکل دایرکتوریش با مال شما فرق داره که الان در ادامه بهش میرسیم.


حالا داخل آن یک فایل جدید با این نام ایجاد کنید:

build.gradle.kts


و داخل اون فایل دستورات زیر رو وارد کنید:

https://gist.github.com/worstkiller/ca9846cfe493dd5fdc9ac0d10e512424

حالا پروژه رو sync کنید تا kotlin DSL فعال شه.


حالا داخل دایرکتوری buildSrc دایرکتوری زیر رو به ترتیب اضافه کنید تا به این شکل در بیاد:

buildSrc.src.main.kotlin

و همون طور که تو عکس مشخصه یک فایل کاتلین به این نام داخل اون ایجاد کنید:

Dependencies

و داخل آن آبجکت های زیر رو قرار بدید ( نباید داخل کلاس تعریفشون کنید، تو خود فایل dependencies قرار بدید)

https://gist.github.com/Shahriyar13/8d7c789277cc257665822f7f5226c0b6


بدیهی که میتونید برای تمیزی و خوانایی بیشتر هر آبجکت رو توی یک فایل جدا هم قرار بدید و حتما بعد از اتمام تمام مراحل این کار را انجام دهید... حالا فعلا همینجوری پیش بریم...

ما الان لیست تمام کتابخونه های لازم رو در appLibraries داریم.

( در صورتی که خواستید کامپایلری رو اد کنید یک لیست جدا برای اون بسازید، نمونه رو میتونید توی پروژه خودم که لینک گیت هابش رو پایین همین مقاله گذاشتم ببینید )


حالا بریم واسه ادامه

تویی root پروژه فایل settings.gradle رو به settings.gradle.kts ریفکتور کنید و دستورات داخل اون رو نیز به این شکل:

تغییر settings.gradle به settings.gradle.kts
تغییر settings.gradle به settings.gradle.kts


قبل تغییر:

//settings.gradle include ':app' rootProject.name = &quotyour project name&quot

بعد تغییر:

//settings.gradle.kts include(&quot:app&quot) rootProject.name = &quotyour project name&quot


اگه بیشتر از ۱ ماژول دارید:

قبل تغییر:

//settings.gradle include ':app' include ':data' include ':domain' rootProject.name = &quotyour project name&quot

بعد تغییر:

//settings.gradle.kts include(&quot:app&quot, &quot:domain&quot, &quot:data&quot) rootProject.name = &quotyour project name&quot


حالا build.gradle اصلی پروژه رو به build.gradle.kts ریفکتور کنید:

و مقادیر داخل آن:

https://gist.github.com/Shahriyar13/e9e7aa925dd762ae6658258baacd2d03


و حالا build.gradle های ماژول app رو (و به همین ترتیب اگه ماژول دیگه ای دارید عمل کنید) به build.gradle.kts ریفکتور کنید:

توجه داشته باشید که ممکنه شما ماژولی به اسم data نداشته باشید و فقط کافیه build.gradle ماژول app رو ریفکتور کنید
توجه داشته باشید که ممکنه شما ماژولی به اسم data نداشته باشید و فقط کافیه build.gradle ماژول app رو ریفکتور کنید


و دستورات داخل آن:

https://gist.github.com/Shahriyar13/8756c843e83c34265425270e2bb32dcd

توجه کنید یکسری چیزا رو که شاید لازم ندارید کامنت کردم که بعدا به کارتون اومد بتونید راحت تر پیاده سازیش کنید.

و تمامممم!!!!!


و کد های پروژه خودم (با معماری Clean-Architecture ):

https://github.com/Shahriyar13/Clean-Architecture-Boilerplate

که نمونه خوب و ساده ای هم برای یادگیری معماری کلین هست. که بعدا در مقاله ای جدا به اون هم میپردازیم.


منبع برای نمونه بیشتر خواستید:

https://medium.com/android-dev-hacks/kotlin-dsl-gradle-scripts-in-android-made-easy-b8e2991e2ba
https://proandroiddev.com/gradle-groovy-to-kotlin-dsl-in-15-minutes-d3129aff227e

منابع بیشتر:

https://docs.gradle.org/current/userguide/kotlin_dsl.html
https://github.com/gradle/kotlin-dsl-samples
androidgradlektsdslkotlin
شاید از این پست‌ها خوشتان بیاید