没有为 Kotlin Multiplatform 项目的公共模块编译的构建输出
no build output compiled for common module of Kotlin Multiplatform project
我想弄清楚为什么我的 Kotlin MPP 库的依赖项目在它们的 common
模块中看不到任何提供的模块,即使目标(jvm,android)可以看到他们。
通过 maven-publish 发布。
库的 /build
目录不包含任何我可以识别为我的通用模块的中间表示的内容,这让我认为我需要明确告诉 Gradle 生成要生成的文件作为 common
包含在已发布的包中。
在android
和desktop
(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"))
}
}
}
}
我想弄清楚为什么我的 Kotlin MPP 库的依赖项目在它们的 common
模块中看不到任何提供的模块,即使目标(jvm,android)可以看到他们。
通过 maven-publish 发布。
库的 /build
目录不包含任何我可以识别为我的通用模块的中间表示的内容,这让我认为我需要明确告诉 Gradle 生成要生成的文件作为 common
包含在已发布的包中。
在android
和desktop
(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"))
}
}
}
}