Skip to content

Commit 49ed521

Browse files
authored
Manage dependencies with a version catalog (#727)
[Version catalog](https://docs.gradle.org/current/userguide/version_catalogs.html) is the best practice for managing dependencies. It makes it easier to track and update versions, and allows to centralize dependencies in a multi-module context. It is an alternative to the `buildSrc` workaround used in some of our projects. This PR does not update libraries versions. We only manage versions (not full dependencies) in the version catalog. This gives all the benefit of centralizing versions, and we don't really need to define all dependencies in the version catalog if they are not used by several modules.
1 parent 6cc534c commit 49ed521

File tree

2 files changed

+48
-38
lines changed

2 files changed

+48
-38
lines changed

gradle/libs.versions.toml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[versions]
2+
kotlin = "1.9.23"
3+
kotlinx-coroutines = "1.7.3"
4+
kotlinx-datetime = "0.6.0"
5+
kotlinx-serialization = "1.6.2"
6+
ktor = "2.3.7"
7+
bitcoinkmp = "0.20.0" # when upgrading bitcoin-kmp, keep secpjnijvm in sync!
8+
secpjnijvm = "0.15.0"
9+
kermit = "2.0.2"
10+
slf4j = "1.7.36"
11+
12+
# test dependencies
13+
test-kodein-memory = "0.12.0"
14+
test-bouncycastle = "1.64"
15+
test-logback = "1.2.3"
16+
test-sqlitejdbc = "3.32.3.3"
17+
18+
[plugins]
19+
multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
20+
serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
21+
dokka = { id = "org.jetbrains.dokka", version = "1.9.10" }

modules/core/build.gradle.kts

Lines changed: 27 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,15 @@ import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeSimulatorTes
44
import org.jetbrains.kotlin.gradle.targets.native.tasks.KotlinNativeTest
55

66
plugins {
7-
kotlin("multiplatform") version "1.9.23"
8-
kotlin("plugin.serialization") version "1.9.23"
9-
id("org.jetbrains.dokka") version "1.9.10"
7+
alias(libs.plugins.multiplatform)
8+
alias(libs.plugins.serialization)
9+
alias(libs.plugins.dokka)
1010
`maven-publish`
1111
}
1212

1313
val currentOs = org.gradle.internal.os.OperatingSystem.current()
1414

1515
kotlin {
16-
17-
val bitcoinKmpVersion = "0.20.0" // when upgrading bitcoin-kmp, keep secpJniJvmVersion in sync!
18-
val secpJniJvmVersion = "0.15.0"
19-
20-
val serializationVersion = "1.6.2"
21-
val coroutineVersion = "1.7.3"
22-
val datetimeVersion = "0.6.0"
23-
val ktorVersion = "2.3.7"
24-
fun ktor(module: String) = "io.ktor:ktor-$module:$ktorVersion"
25-
val kermitLoggerVersion = "2.0.2"
26-
2716
jvm {
2817
compilations.all {
2918
kotlinOptions.jvmTarget = "1.8"
@@ -67,64 +56,64 @@ kotlin {
6756
sourceSets {
6857
commonMain {
6958
dependencies {
70-
api("fr.acinq.bitcoin:bitcoin-kmp:$bitcoinKmpVersion")
71-
api("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutineVersion")
72-
api("org.jetbrains.kotlinx:kotlinx-serialization-core:$serializationVersion")
73-
api("org.jetbrains.kotlinx:kotlinx-serialization-cbor:$serializationVersion")
74-
api("org.jetbrains.kotlinx:kotlinx-serialization-json:$serializationVersion")
75-
api("org.jetbrains.kotlinx:kotlinx-datetime:$datetimeVersion")
76-
api("co.touchlab:kermit:$kermitLoggerVersion")
77-
api(ktor("network"))
78-
api(ktor("network-tls"))
79-
implementation(ktor("client-core"))
80-
implementation(ktor("client-auth"))
81-
implementation(ktor("client-json"))
82-
implementation(ktor("client-content-negotiation"))
83-
implementation(ktor("serialization-kotlinx-json"))
59+
api("fr.acinq.bitcoin:bitcoin-kmp:${libs.versions.bitcoinkmp.get()}")
60+
api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${libs.versions.kotlinx.coroutines.get()}")
61+
api("org.jetbrains.kotlinx:kotlinx-serialization-core:${libs.versions.kotlinx.serialization.get()}")
62+
api("org.jetbrains.kotlinx:kotlinx-serialization-cbor:${libs.versions.kotlinx.serialization.get()}")
63+
api("org.jetbrains.kotlinx:kotlinx-serialization-json:${libs.versions.kotlinx.serialization.get()}")
64+
api("org.jetbrains.kotlinx:kotlinx-datetime:${libs.versions.kotlinx.datetime.get()}")
65+
api("co.touchlab:kermit:${libs.versions.kermit.get()}")
66+
api("io.ktor:ktor-network:${libs.versions.ktor.get()}")
67+
api("io.ktor:ktor-network-tls:${libs.versions.ktor.get()}")
68+
api("io.ktor:ktor-client-core:${libs.versions.ktor.get()}")
69+
api("io.ktor:ktor-client-auth:${libs.versions.ktor.get()}")
70+
api("io.ktor:ktor-client-json:${libs.versions.ktor.get()}")
71+
api("io.ktor:ktor-client-content-negotiation:${libs.versions.ktor.get()}")
72+
api("io.ktor:ktor-serialization-kotlinx-json:${libs.versions.ktor.get()}")
8473
}
8574
}
8675

8776
commonTest {
8877
dependencies {
8978
implementation(kotlin("test-common"))
9079
implementation(kotlin("test-annotations-common"))
91-
implementation("org.kodein.memory:klio-files:0.12.0")
80+
implementation("org.kodein.memory:klio-files:${libs.versions.test.kodein.memory.get()}")
9281
}
9382
}
9483

9584
jvmMain {
9685
dependencies {
97-
api(ktor("client-okhttp"))
98-
implementation("fr.acinq.secp256k1:secp256k1-kmp-jni-jvm:$secpJniJvmVersion")
99-
implementation("org.slf4j:slf4j-api:1.7.36")
86+
api("io.ktor:ktor-client-okhttp:${libs.versions.ktor.get()}")
87+
implementation("fr.acinq.secp256k1:secp256k1-kmp-jni-jvm:${libs.versions.secpjnijvm.get()}")
88+
implementation("org.slf4j:slf4j-api:${libs.versions.slf4j.get()}")
10089
}
10190
}
10291

10392
jvmTest {
10493
dependencies {
10594
implementation(kotlin("test-junit"))
106-
implementation("org.bouncycastle:bcprov-jdk15on:1.64")
107-
implementation("ch.qos.logback:logback-classic:1.2.3")
108-
implementation("org.xerial:sqlite-jdbc:3.32.3.3")
95+
implementation("org.bouncycastle:bcprov-jdk15on:${libs.versions.test.bouncycastle.get()}")
96+
implementation("ch.qos.logback:logback-classic:${libs.versions.test.logback.get()}")
97+
implementation("org.xerial:sqlite-jdbc:${libs.versions.test.sqlitejdbc.get()}")
10998
}
11099
}
111100

112101
if (currentOs.isMacOsX) {
113102
iosMain {
114103
dependencies {
115-
implementation(ktor("client-ios"))
104+
api("io.ktor:ktor-client-ios:${libs.versions.ktor.get()}")
116105
}
117106
}
118107
macosMain {
119108
dependencies {
120-
implementation(ktor("client-darwin"))
109+
api("io.ktor:ktor-client-darwin:${libs.versions.ktor.get()}")
121110
}
122111
}
123112
}
124113

125114
linuxMain {
126115
dependencies {
127-
implementation(ktor("client-curl"))
116+
api("io.ktor:ktor-client-curl:${libs.versions.ktor.get()}")
128117
}
129118
}
130119

0 commit comments

Comments
 (0)