Gradle 在多平台子项目中使用kapt
我有以下项目结构Gradle 在多平台子项目中使用kapt,gradle,kotlin,gradle-kotlin-dsl,kotlin-multiplatform,kapt,Gradle,Kotlin,Gradle Kotlin Dsl,Kotlin Multiplatform,Kapt,我有以下项目结构 root-project │ build.gradle.kts │ └───multiplatform-project │ │ build.gradle.kts │ │ │ └───src │ │ kotlin | | js │ └───simple-kotlin-project │ build.gradle.kts 因此总共有3个项目(3个build.gradle.kts文件) 这是根目录项目build
root-project
│ build.gradle.kts
│
└───multiplatform-project
│ │ build.gradle.kts
│ │
│ └───src
│ │ kotlin
| | js
│
└───simple-kotlin-project
│ build.gradle.kts
因此总共有3个项目(3个build.gradle.kts
文件)
build.gradle.kts
plugins {
kotlin("jvm") version kotlinVersion apply false
kotlin("kapt") version kotlinVersion apply false
kotlin("multiplatform") version kotlinVersion apply false
}
subprojects {
apply<JavaPlugin>()
if (name.contains("multiplatform-project")) {
apply(plugin = "org.jetbrains.kotlin.multiplatform")
} else {
apply(plugin = "kotlin")
}
apply(plugin = "kotlin-kapt")
dependencies {
implementation(kotlin("stdlib"))
implementation(kotlin("reflect"))
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0-M2")
implementation("org.slf4j:slf4j-api:1.7.25")
implementation("ch.qos.logback:logback-core:1.2.3")
implementation("ch.qos.logback:logback-classic:1.2.3")
testImplementation("junit:junit:$jUnitVersion")
}
}
val jacksonVersion: String by project
val ktorVersion: String by project
kotlin {
jvm {
val main by compilations.getting {
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
compileKotlinTask
output
}
}
js {}
sourceSets {
val jvmMain by getting {
dependencies {
implementation("com.fasterxml.jackson.core:jackson-core:$jacksonVersion")
implementation("com.fasterxml.jackson.core:jackson-databind:$jacksonVersion")
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:$jacksonVersion")
implementation("io.ktor:ktor-html-builder:$ktorVersion")
implementation("io.ktor:ktor-server-netty:$ktorVersion")
kapt(project(":generator")) // THIS DOESN'T WORK!!!
}
}
}
}
因此,问题归结为如何在kotlin sourceSet上运行kapt插件,就像我在一个简单的kotlin项目中运行插件一样,将它添加到项目的依赖项中。我想你已经找到了你想要的,但是,让我把它贴在这里,供其他可能有兴趣解决这个问题的用户使用 该问题主要是由
kapt
解决Kotlin Gradle插件在kapt名称下注册的项目
扩展引起的。
因此,kotlin.sourceset.jvm().compilations[“main”].defaultSourceSet.dependencies
范围中没有在kapt配置中声明依赖项的扩展
解决方法包括手动获取配置并向其中添加项目依赖项:
sourceSets {
val jvmMain by getting {
dependencies {
...
configurations.get("kapt").dependencies.add(project(":generator"))
}
}
}
如果您使用的是Gradle kotlin脚本,那么您需要做一些稍微不同的事情:
configurations[“kapt”].dependencies.add(project.dependencies.create(“com.example:foo:1.0”)
sourceSets {
val jvmMain by getting {
dependencies {
...
configurations.get("kapt").dependencies.add(project(":generator"))
}
}
}