All Downloads are FREE. Search and download functionalities are using the official Maven repository.

tech.skot.tools.gradle.PluginModel.kt Maven / Gradle / Ivy

package tech.skot.tools.gradle

import com.android.build.gradle.LibraryExtension
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.kotlin.dsl.findByType
import org.gradle.kotlin.dsl.get
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import tech.skot.Versions

//open class SKPluginModelExtension {
//    var message: String? = null
//}

class PluginModel: Plugin {

    override fun apply(project: Project) {
//        val extension = project.extensions.create("skot")
        project.plugins.apply("com.android.library")
        project.plugins.apply("kotlinx-serialization")

        project.extensions.findByType(LibraryExtension::class)?.conf(project)

        project.extensions.findByType(KotlinMultiplatformExtension::class)?.conf(project)

    }


    private fun LibraryExtension.conf(project:Project) {

        androidBaseConfig(project)


        sourceSets {
            getByName("main"){
                java.srcDirs("src/androidMain/kotlin")
                res.srcDir("src/androidMain/res")
                manifest.srcFile("src/androidMain/AndroidManifest.xml")

                skVariantsCombinaison(project.rootProject.rootDir.toPath()).forEach {
                    res.srcDir("src/androidMain/res$it")
                    java.srcDir("src/androidMain/kotlin$it")
                }
            }

            getByName("androidTest") {
                java.srcDir("src/androidTest/kotlin")
            }


        }

        packagingOptions {
            exclude("META-INF/*.kotlin_module")
            exclude("META-INF/*")
        }



    }

    private fun KotlinMultiplatformExtension.conf(project: Project) {
        android("android")
        jvm("jvm")
        if (project.hasIosApp()) {
            ios {
                binaries {
                    framework {
                        baseName = "model"
                        linkerOpts.add("-lsqlite3")
                    }
                }
            }
        }


        sourceSets["commonMain"].kotlin.srcDir("generated/commonMain/kotlin")



        val parentProjectPath = project.parent?.path ?: ""

        sourceSets["commonMain"].dependencies {
            api(project("$parentProjectPath:modelcontract"))
            api("${Versions.group}:model:${Versions.skot}")
            api("org.jetbrains.kotlinx:kotlinx-serialization-core:${Versions.serialization}")


            if (project.skReadImportsProperties()?.ktor2 != false) {
                api("io.ktor:ktor-client-content-negotiation:${Versions.ktor}")
                api("io.ktor:ktor-serialization-kotlinx-json:${Versions.ktor}")
            }
            else {
                api("io.ktor:ktor-client-serialization:${Versions.ktor}")
            }
        }

        skVariantsCombinaison(project.rootProject.rootDir.toPath()).forEach {
            sourceSets["commonMain"].kotlin.srcDir("src/commonMain/kotlin$it")
            sourceSets["androidMain"].kotlin.srcDir("src/androidMain/kotlin$it")
        }


        sourceSets["jvmTest"].kotlin.srcDir("generated/jvmTest")

        sourceSets["androidTest"].dependencies {
            implementation("org.jetbrains.kotlin:kotlin-test-junit:${Versions.kotlin}")
            implementation("org.jetbrains.kotlin:kotlin-test:${Versions.kotlin}")
        }


        sourceSets["androidMain"].kotlin.srcDir("generated/androidMain/kotlin")

    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy