Version Catalog Nedir?

Talha Fakıoğlu
3 min readSep 27, 2023

--

Android projelerimizde kullandığımız kütüphaneleri build.gradle içerisine ekliyoruz bildiğiniz üzere. Peki kütüphaneleri eklediğimiz dependencies alanını yönetme konusunda neler kullanılıyor, hangilerinin ne gibi avantajları var bu konular üzerine konuşacağız.

Kullandığımız bazı yöntemler

Manuel Yöntem

Kullandığımız kütüphanelerin güncellenmesi gerektiğinde, onu her Gradle dosyasında manuel olarak değiştirmemiz gerekir. Birden fazla module içeren projelerimizde bunu yönetmek hem zor hem de hataya oldukça açık bir yöntemdir.

ext blokları

Google’ın kendi dökümanlarında önerdiği yöntemdir ve manuel yönetimde karşılaştığımız sorunlara çözüm sağlar. Dezavantaj olarak IDE’nin kod tamamlama sunmamasıdır.

buildSrc Yöntemi

Bu yöntemde, özel bir Gradle modülü kullanırız ve Kotlin kodunu kullanarak bağımlılıklarınızı tanımlarsınız. Bu yöntemin en büyük yararları otomatik tamamlama ve gezinmedir, dezavantajı ise versiyon güncellenmesinde yapılan herhangi bir değişiklikte tüm modülün yeniden derlenmesi gerekmesidir.

Versiyon Katalog’u Nedir ?

Projelerimiz modüler hal almaya başladıkça, tüm bağımlılıkları aynı tutmak, gerektiğinde güncellemek zor ve can sıkıcı bir hale gelir. Bunu çözmek için birkaç alternatifimiz var ve Gradle tarafından projelerimizde bağımlılıkları yönetimimizi kolaylaştırmak için Versiyon Katalog’unu tanıttı.

Projelerimizde kullanılacak bağımlılıklar liste halinde tutulur. Esnek bir yapıdadır, gradle’ın sunduğu avantajlardan yararlanır. Versiyon katalog’u, projemiz modüler yapıda olduğunda (bağımlılıkları yalnızca tek bir yerde güncellememiz gerektiğinden) kullandığımız bağımlılıklarımızı yönetmenin etkili bir yoludur ve diğer her şey sürüm kataloğu tarafından halledilecektir.

Kullanım çeşitlilikleri

Versiyon katalog’larını manuel olaraksettings.gradle ‘da oluşturabiliriz, ancak anlaşılması gerçekten kolay olacak bir TOML dosyası oluşturup kullanmaktır.

settings.gradle Kullanımı

İlk yapmamız gereken şey versiyon katalog özelliğini etkinleştirmemiz gerekiyor. Etkinleştirmek için bu satırı settings.gradle içerisine ekliyoruz.

enableFeaturePreview("VERSION_CATALOGS")

Gradle’ı sync ettiğimizde özelliğimiz etkileştirilmiş hale gelecek. Şimdi bağımlılıklarımızı eklemeye başlayalım.

Örnek olarak Compose-Ui kütüphanesini kullanalım. Compose-Ui bağımlılığının kullanılabilir hale gelebilmesi için bir alias, artifact ve versiyon belirtmemiz gerekiyor.

dependencyResolutionManagement {
versionCatalogs {
create("libs") {
version("compose-ui", "1.3.2")
alias("compose-ui").to("androidx.compose.ui", "ui").versionRef("compose-ui")
}
}
}

Burada “libs” bir versiyon katalog’unun adıdır. Ancak bağımlılıklarımız vb. hepsi aynı sürümü kullanıyor:

dependencyResolutionManagement {
versionCatalogs {
create("libs") {
version("compose", "1.3.2")
alias("compose-ui").to("androidx.compose.ui", "ui").versionRef("compose")
alias("compose-ui-tooling").to("androidx.compose.ui", "ui-tooling").versionRef("compose")
alias("compose-runtime").to("androidx.compose.runtime", "runtime-livedata").versionRef("compose")
}
}
}

Versiyon katalog’unda , yaygın olarak birlikte kullanılan “bağımlılık grupları” bundle ile tanımlanım ilgili kullanılabilir. Nasıl mı?

dependencyResolutionManagement {
versionCatalogs {
create("libs") {
version("compose", "1.3.2")
alias("compose-ui").to("androidx.compose.ui", "ui").versionRef("compose")
alias("compose-ui-tooling").to("androidx.compose.ui", "ui-tooling").versionRef("compose")
alias("compose-runtime").to("androidx.compose.runtime", "runtime-livedata").versionRef("compose")

bundle("compose-bundle",["compose-ui","compose-ui-tooling","compose-runtime"])
}
}
}

settings.gradle’da bağımlılıklarımızı tanımladık. Şimdi TOML dosyası ile nasıl tanımlama yapabiliriz ona bakalım.

TOML Kullanımı

Gradle dosyası altında libs.versions.toml oluşturuyoruz, bu toml dosyası versions libraries bundles pluginsgibi tüm bağımlılıkları, versionları ve tanımları içeren dosyadır.

[versions]
# Define the dependency versions
kotlin = "1.7.10"
compose = "1.3.2"

[libraries]
# Define the libraries
compose-ui = { group = "androidx.compose.ui", name = "ui", version.ref = "compose" }
compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "compose" }
compose-runtime = { group = "androidx.compose.runtime", name = "runtime-livedata", version.ref = "compose" }

[bundles]
# Define bundles/groups of libraries
compose = ["compose.ui", "compose.ui.tooling", "compose.runtime"]

[plugins]
kotlin = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }

İşte bu kadar. Gerekli versiyon, kütüphane vb. tanımlamalarımızı yaptık.

Nasıl kullanılır ?

Tüm kurulumlarımızdan sonra gradle dosyalarımızdaki bağımlılıkları güncelliyoruz.

build.gradle.kts

dependencies {
// Adds a single dependency
implementation(libs.kotlin)

// Add a group of dependencies
implementation(libs.bundles.compose)

// Tests dependencies works in the same way
testImplementation(libs.junit)
androidTestImplementation(libs.espresso.core)
}

Projemizi sync ediyoruz ve kullanıma hazır hale getirmiş oluyoruz.

Versiyon katalog kullandığım örnek projemi incelemek için linke tıklayabilirsin. Nowinandroid projesinde incelemek için bu linke tıklayabilirsin. Umarım faydalı bir yazı olmuştur. Bir sonraki yazıda görüşmek üzere.

--

--