Kotlin1.4.30ApacheBeam编译错误

我试图将一个 Apache Beam 数据流管道更新到最新的 kotlin 1.4.30 版本,该管道当前正在 kotlin 1.4.21 上运行,但是一旦我将 build.gradle 升级到 1.4.30 版,编译就会失败,出现以下异常:

java.lang.IllegalStateException: Could not read class: VirtualFile: /Users/stefanomassera/.gradle/caches/modules-2/files-2.1/org.apache.beam/beam-sdks-java-core/2.26.0/b57f8fa5ae66564c7ffafde34b690057f471bfa8/beam-sdks-java-core-2.26.0.jar!/org/apache/beam/sdk/options/PipelineOptions.class
    at org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass.<init>(BinaryJavaClass.kt:120)
    at org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass.<init>(BinaryJavaClass.kt:34)
    at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCliJavaFileManagerImpl.findClass(KotlinCliJavaFileManagerImpl.kt:115)
    at org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade$CliFinder.findClass(KotlinJavaPsiFacade.java:484)
  ... omissis for brevity
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.IllegalArgumentException: Wildcard mast have a bound for annotation of WILDCARD_BOUND position
    at org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaAnnotation$Companion.computeTargetType$resolution_common_jvm(Annotations.kt:188)
    at org.jetbrains.kotlin.load.java.structure.impl.classFiles.AnnotationsAndParameterCollectorMethodVisitor.visitTypeAnnotation$getTargetType(Annotations.kt:111)
    at org.jetbrains.kotlin.load.java.structure.impl.classFiles.AnnotationsAndParameterCollectorMethodVisitor.visitTypeAnnotation(Annotations.kt:117)
    at org.jetbrains.org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1427)
    at org.jetbrains.org.objectweb.asm.ClassReader.accept(ClassReader.java:719)
    at org.jetbrains.org.objectweb.asm.ClassReader.accept(ClassReader.java:402)
    at org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass.<init>(BinaryJavaClass.kt:115)
    ... 101 more

我也尝试过一个空白的虚拟项目只是为了验证它是否与当前的 kotlin 和 apache beam 存在兼容性错误,这似乎是一个兼容性问题,这里是我的虚拟测试

主文件

package org.example

import org.apache.beam.sdk.Pipeline
import org.apache.beam.sdk.options.PipelineOptionsFactory

class DummyPipeline {
    fun main(args: Array<String>) {
        val options = PipelineOptionsFactory.fromArgs(*args)
            .withValidation()
            .`as`(DummyPipelineOptions::class.java)
        val pipeline = Pipeline.create(options)
        pipeline.run()
    }
}

构建.gradle

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.4.30' //<-- do not build
    //id 'org.jetbrains.kotlin.jvm' version '1.4.21' // <-- correctly build
}

group 'org.example'
version '1.0-SNAPSHOT'

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib"
    implementation "org.apache.beam:beam-sdks-java-io-google-cloud-platform:2.26.0"
    runtimeOnly "org.apache.beam:beam-runners-direct-java:2.26.0"
}

有没有人解决过这个兼容性问题?

回答

它是由 Kotlin 编译器引起的。

抱歉打扰了,我目前正在编译器方面解决这个问题。该修复程序将在 Kotlin 1.5-M1 中可用。

不幸的是,这里没有正常的解决方法,因为在读取类文件时会出现问题(无法排除读取类文件的机制中的问题逻辑)。


以上是Kotlin1.4.30ApacheBeam编译错误的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>