gpt4 book ai didi

gradle - 将 kapt 与多平台子项目一起使用

转载 作者:行者123 更新时间:2023-12-02 12:01:54 26 4
gpt4 key购买 nike

我有以下项目结构

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")
    }
    }
  • 这是使用 kapt 的简单 kotlin 项目和 作品
    val jacksonVersion: String by project

    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("com.fasterxml.jackson.module:jackson-module-kotlin:$jacksonVersion")

    kapt(project(":generator")) // THIS WORKS!!!
    }
  • 现在我的问题是如何在看起来像这样的多平台项目中进行这项工作
    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!!!
    }
    }
    }
    }

  • 这是我在 IDEA 中看到的错误

    enter image description here

    这不是幻觉错误。如果我运行 gradle build,我会收到以下错误:

    build.gradle.kts:38:22: Type mismatch: inferred type is ProjectDependency but Action was expected



    所以,问题归结为我如何运行 kapt kotlin sourceSet 上的插件与我可以在一个简单的 kotlin 项目中通过将其添加到项目的依赖项中的方式相同。

    最佳答案

    我想你已经找到了 answer您正在寻找,但让我将其发布给可能有兴趣解决此问题的任何其他用户。

    问题主要是由kapt引起的解析到 Project Kotlin Gradle 插件以 kapt 名称注册的扩展。
    因此,在 kapt 配置中声明依赖项的扩展在 kotlin.sourceSets.jvm().compilations["main"].defaultSourceSet.dependencies 中不可用。范围。

    解决方法包括手动获取配置并向其添加项目依赖项:

    sourceSets {
    val jvmMain by getting {
    dependencies {
    ...
    configurations.get("kapt").dependencies.add(project(":generator"))
    }
    }
    }

    关于gradle - 将 kapt 与多平台子项目一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59321848/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com