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

no build output compiled for common module of Kotlin Multiplatform project

我想弄清楚为什么我的 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-based 个构建存在时,commonMain 将使用 jdk8 而不是 common 的平台类型构建。通过显式依赖 stdlib-common,它将被强制返回到 common 平台,然后将创建和发布正确的元数据。

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

}