From 4839714ff0c2ee59988743cf516f11c7349004b2 Mon Sep 17 00:00:00 2001 From: lihenggui Date: Thu, 10 Oct 2024 14:24:37 -0700 Subject: [PATCH] Add convention plugin for koin --- build-logic/convention/build.gradle.kts | 4 ++ .../src/main/kotlin/KoinConventionPlugin.kt | 58 +++++++++++++++++++ gradle/libs.versions.toml | 5 ++ 3 files changed, 67 insertions(+) create mode 100644 build-logic/convention/src/main/kotlin/KoinConventionPlugin.kt diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 8f291976e..28614aa19 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -129,5 +129,9 @@ gradlePlugin { id = "nowinandroid.cmp.feature" implementationClass = "CmpFeatureConventionPlugin" } + register("koin") { + id = "nowinandroid.di.koin" + implementationClass = "KoinConventionPlugin" + } } } diff --git a/build-logic/convention/src/main/kotlin/KoinConventionPlugin.kt b/build-logic/convention/src/main/kotlin/KoinConventionPlugin.kt new file mode 100644 index 000000000..cae410d84 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/KoinConventionPlugin.kt @@ -0,0 +1,58 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import com.google.samples.apps.nowinandroid.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask + +class KoinConventionPlugin: Plugin { + override fun apply(target: Project) { + with(target) { + with(pluginManager) { + apply("com.google.devtools.ksp") + } + + extensions.configure(KotlinMultiplatformExtension::class.java) { + sourceSets.named("commonMain").configure { + kotlin.srcDir("build/generated/ksp/metadata/commonMain/kotlin") + } + } + + dependencies { + "commonMainImplementation"(platform(libs.findLibrary("koin.bom").get())) + "commonMainImplementation"(libs.findLibrary("koin.core").get()) + "commonMainApi"(platform(libs.findLibrary("koin.annotation.bom").get())) + "commonMainApi"(libs.findLibrary("koin.annotation").get()) + "commonTestImplementation"(libs.findLibrary("koin.test").get()) + "kspCommonMainMetadata"(libs.findLibrary("koin.ksp.compiler").get()) + "kspAndroid"(libs.findLibrary("koin.ksp.compiler").get()) + "kspIosX64"(libs.findLibrary("koin.ksp.compiler").get()) + "kspIosArm64"(libs.findLibrary("koin.ksp.compiler").get()) + "kspIosSimulatorArm64"(libs.findLibrary("koin.ksp.compiler").get()) + "kspJvm"(libs.findLibrary("koin.ksp.compiler").get()) + } + + project.tasks.withType(KotlinCompilationTask::class.java).configureEach { + if(name != "kspCommonMainKotlinMetadata") { + dependsOn("kspCommonMainKotlinMetadata") + } + } + } + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 333503d3a..fd519d909 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -67,6 +67,7 @@ kotlinInject = '0.7.2' multiplatform-settings = "1.2.0" kermit = "2.0.4" koin = "4.0.0" +koin-annotations = "1.4.0-RC4" ktor = "3.0.0-rc-1" ktrofit = "2.1.0" buildKonfig = "0.15.2" @@ -143,6 +144,9 @@ hilt-core = { group = "com.google.dagger", name = "hilt-core", version.ref = "hi hilt-ext-compiler = { group = "androidx.hilt", name = "hilt-compiler", version.ref = "hiltExt" } hilt-ext-work = { group = "androidx.hilt", name = "hilt-work", version.ref = "hiltExt" } javax-inject = { module = "javax.inject:javax.inject", version = "1" } +koin-annotations-bom = { group = "io.insert-koin", name = "koin-annotations-bom", version.ref = "koin-annotations" } +koin-annotations = { group = "io.insert-koin", name = "koin-annotations" } +koin-ksp-compiler = { group = "io.insert-koin", name = "koin-ksp-compiler" } koin-bom = { group = "io.insert-koin", name = "koin-bom", version.ref = "koin" } koin-android = { group = "io.insert-koin", name = "koin-android"} koin-core = { group = "io.insert-koin", name = "koin-core"} @@ -272,3 +276,4 @@ nowinandroid-kmp-library = { id = "nowinandroid.kmp.library" } nowinandroid-kotlin-inject = { id = "nowinandroid.kmp.inject" } nowinandroid-sqldelight = { id = "nowinandroid.sqldelight" } nowinandroid-cmp-feature = { id = "nowinandroid.cmp.feature" } +nowinandroid-di-koin = { id = "nowinandroid.di.koin" }