没有为Kotlin Multiplatform项目的公共模块编译的构建输出



我想弄清楚为什么我的Kotlin MPP库的依赖项目在他们的common模块中看不到任何提供的模块,即使目标(jvm, android)可以看到它们。

通过maven-publish发布。

库的/build目录不包含任何我可以识别为我的公共模块的中间表示的内容,这使我认为我需要显式地告诉Gradle生成要包含在发布包中的common文件。

实际上,在androiddesktop (jvm)模块中生成的.aar.jar文件看起来都很正常,但是发布的公共模块是空的。

我需要这个公共模块被填充,然后我才能在依赖项目的公共模块中对它进行编码。

这是我的build.gradle.kts的相关部分。我省略了存储库配置,因为它似乎可以工作。

我基本上是按照kotlinlang.org上的说明做的。

我已经查看了maven-publish插件的配置,kotlin-multiplatformm插件的设置,以及配置的项目结构。

kotlin版本为1.6.10,由于Jetbrains Compose依赖而无法更新。


plugins {
    kotlin("multiplatform")
    id("com.android.library")
    id("maven-publish")
}
kotlin {
    android {
        publishLibraryVariants = listOf("release", "debug")
    }
    jvm("desktop") {
        compilations.all {
            kotlinOptions {
                jvmTarget = "11"
            }
        }
    }
    val publicationsFromMainHost = listOf(jvm("desktop").name, "kotlinMultiplatform")
    publishing {
        publications {
            matching { it.name in publicationsFromMainHost }.all {
                val targetPublication = this@all
                tasks.withType<AbstractPublishToMaven>()
                    .matching { it.publication == targetPublication }
            }
        }
    }
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.3.2")
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test"))
            }
        }
        val androidMain by getting {
            dependencies {
                implementation("androidx.startup:startup-runtime:1.1.1")
            }
        }
        val androidTest by getting {
            dependencies {
                implementation("junit:junit:4.13.2")
                implementation("androidx.test:core:1.4.0")
                implementation("androidx.test:runner:1.4.0")
                implementation("androidx.test:rules:1.4.0")
                implementation("org.robolectric:robolectric:4.6.1")
            }
        }
        val desktopMain by getting
        val desktopTest by getting {
            dependencies {
                implementation("junit:junit:4.13.2")
            }
        }
    }
}

答案是手动提供Kotlin stdlib依赖项,而不是依赖gradle插件来添加它。

当只存在基于jvm的构建时,commonMain将使用平台类型jdk8而不是common来构建。通过显式地依赖stdlib-common,它将被强制返回到common平台,然后正确的元数据将被创建和发布。

kotlin {
    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation(kotlin("stdlib-common"))
            }
        }
    }
}

最新更新