首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上的KSP在kspJs上失败,"Collection有多个元素“。

上的KSP在kspJs上失败,"Collection有多个元素“。
EN

Stack Overflow用户
提问于 2021-11-27 22:39:47
回答 1查看 640关注 0票数 0

我正在试验KSP (Kotlin符号处理),看看它能做什么,我正试图让它在Kotlin多平台项目上工作。当我只启用kspJvm时,它就能很好地工作,只要我也启用了kspJs,它就会在"Collection具有多个元素“中失败。

我在这个github演示项目中重新创建了这个问题:https://github.com/janvladimirmostert/observable-demo

在我的处理器中,我有以下配置:

build.gradle.kts

代码语言:javascript
复制
val kspVersion: String by project

group = "io.jvaas"

plugins {
    kotlin("multiplatform")
}

kotlin {
    jvm {
        compilations.all {
            kotlinOptions.jvmTarget = "11"
        }
    }
    sourceSets {
        val commonMain by getting
        val jvmMain by getting {
            dependencies {
                implementation("com.google.devtools.ksp:symbol-processing-api:$kspVersion")
            }
        }
    }
}

gradle.properties

代码语言:javascript
复制
kotlinVersion=1.6.0
kspVersion=1.6.0-1.0.1

src/commonMain/kotlin/io/jvaas/observe/Observable.kt

代码语言:javascript
复制
package io.jvaas.observe

annotation class Observable

src/jvmMain/resources/META-INF/services/com.google.devtools.ksp.processing.SymbolProcessorProvider

代码语言:javascript
复制
io.jvaas.observe.ObservableProcessorProvider

src/jvmMain/kotlin/io/jvaas/observe/ObservableProcessor.kt

代码语言:javascript
复制
class ObservableProcessor(
    val codeGenerator: CodeGenerator,
    val logger: KSPLogger,
) : SymbolProcessor {

    ...

}

class ObservableProcessorProvider : SymbolProcessorProvider {
    override fun create(
        environment: SymbolProcessorEnvironment
    ): SymbolProcessor {
        return ObservableProcessor(environment.codeGenerator, environment.logger)
    }
}

在我的消费者中,我有以下几点:

代码语言:javascript
复制
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackOutput.Target.UMD

group = "com.od"

plugins {
    application
    id("com.google.devtools.ksp") version "1.6.0-1.0.1"
    kotlin("plugin.serialization")
    kotlin("multiplatform")
    id("com.github.johnrengelman.shadow")
}


kotlin {

    jvm {
        compilations.all {
            kotlinOptions.jvmTarget = "11"
        }
    }
    js(IR) {
        browser {
            binaries.executable()
            webpackTask {
                output.libraryTarget = UMD
            }
        }
    }
    sourceSets {
        val commonMain by getting {
            dependencies {

                val serializationVersion = "1.3.1"
                implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:$serializationVersion")
                implementation("io.jvaas:jvaas-observe")

            }
        }
        val commonTest by getting

        val jvmMain by getting {
            dependencies {

                
            }
        }
        val jvmTest by getting {
            dependencies {
                implementation(kotlin("test-junit"))
            }
        }
        val jsMain by getting


        val jsTest by getting {
            dependencies {
                implementation(kotlin("test-js"))
            }
        }
    }
}

dependencies {
    add("kspJvm", "io.jvaas:jvaas-observe")
    // add("kspJs", "io.jvaas:jvaas-observe") // <--- fails if enabled
    //ksp("io.jvaas:jvaas-observe")
}

application {
    mainClassName = "com.od.demo.Main"
}

applications/od-server/src/commonMain/kotlin/com/od/demo/Blah.kt

代码语言:javascript
复制
package com.od.demo

import io.jvaas.observe.Observable

@Observable
class Blah {

    var test1: String = ""
    var test2: Int = 0
    var test3: Array<String> = arrayOf()

}

当启用kspJvm选项并正确地将文件输出到

applications/od-server/build/generated/ksp/jvmMain/kotlin/com/od/demo/BlahO.kt

如果我为kspJs启用它,它将失败。

代码语言:javascript
复制
add("kspJs", "io.jvaas:jvaas-observe")


Execution failed for task ':applications:od-server:compileProductionExecutableKotlinJs'.
> Failed to calculate the value of task ':applications:od-server:compileProductionExecutableKotlinJs' property 'entryModule$kotlin_gradle_plugin'.
   > Collection has more than one element.

我已经尝试过通常的gradle构建-info/--调试/--扫描,但还不清楚我可以从哪里开始寻找解决这个问题的方法。

如前所述,我做了一个演示项目来演示错误:https://github.com/janvladimirmostert/observable-demo

对如何解决这个错误有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-22 11:41:13

https://github.com/google/ksp/issues/744已经解决了问题,但我不确定它是否已经发布。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70139266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档