ChatGPT解决这个技术问题 Extra ChatGPT

无法将使用 JVM 目标 1.8 构建的字节码内联到使用 JVM 目标 1.6 构建的字节码

尝试通过 IntelliJ 运行示例 CorDapp (GitHub CorDapp) 时,我收到以下错误:

无法将使用 JVM 目标 1.8 构建的字节码内联到使用 JVM 目标 1.6 构建的字节码

如何修改 IntelliJ 设置,以便所有字节码都使用相同的 JVM 目标构建?

我可以通过将此库添加到 build.gradle 依赖项 { compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8") } 来解决此问题
@MunishChandel 这还不够。我们还必须按照以下答案的建议...
在 Linux 上指定 jvmTarget = "15" 时出现相同的错误,但相同的项目在 Windows 上运行,两者都在 IntelliJ 2020.3 上。更改为 jvmTarget = "14" 并且它对两者都有效。无论哪种情况,命令行都没有错误,仅在 IntelliJ 中。

B
Braian Coronel

应用程序/build.gradle

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8.toString()
    }
}

总帐

Use Java 8 language features


到目前为止,Android Studio v3.5 这是在尝试了所有其他方法之后唯一有效的解决方案。奇怪的是,在 Settings > Kotlin Compiler 中设置相同的值没有效果。
只需 kotlinOptions { jvmTarget = "1.8" } 就足够了。
然后应该“使缓存无效并重新启动”
在定义 kotlinOption 错误消失后,我已经定义了 compileOption 但没有定义 kotlinOption。它为我工作。感谢分享。
如果这不适合安卓怎么办? compileOptionskotlinOptions 去哪儿了?
e
erluxman

您可以按如下方式解决此问题:

打开 IntelliJ 首选项

如果 Android Studio > 3.4,请转到构建、执行、部署 > 编译器 > Kotlin 编译器但其他设置 > Kotlin 编译器

将目标 JVM 版本更改为 1.8

单击应用


我已经将此设置固定为 1.8,但在单步执行断点时仍然看到此错误。我主要是在点击保管库查询时看到这一点。有什么进一步的建议吗?看来这个目标 JVM 位并没有完全解决它。
在您的 Project Structure 上,确保您还在 General 标签下的 Kotlin Facet 上将 Target platform 更改为 JVM 1.8
如果存在未解决的依赖关系,则会出现此错误!
对我来说,Kotlin Compiler 设置实际上放在 Other Settings 部分。
如果在应用后重新启动还不够 → 重新启动 & 使缓存无效。
A
Amuthan

您应该在 build.gradle 中配置如下内容

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

或者,在 Gradle Kotlin DSL 中:tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
知道如何让它与 kotlin-android 插件一起使用吗?
工作没有太多麻烦。我会推荐它
请将此添加到您的应用级 Gradle 的 android {} 部分。
我收到错误“评估脚本时出现问题。> 无法为 org.gradle.api.Project 类型的项目 ':subprojectName' 获取未知属性 'org'。”
D
D. Sergeev

请将此代码添加到您的 app/build.gradle 中的 android 部分

compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8
    }

它工作得很好你能解释一下吗,为什么我们需要这样做,它的含义是什么。
当我的目标片段无法接受 navArgs() 并且抱怨构建了内联字节码时,它可以工作。我的应用程序 gradle 有源和目标的编译选项,但我没有 kotlinOptions。在我添加 Kotlin 选项并清理项目>重建项目之后。工作正常。
它与最佳答案没有区别。
Z
ZX9

就我而言,只是像这样更改目标 JVM 版本:文件 > 设置 > Kotlin 编译器 > 目标 JVM 版本 > 1.8 并没有帮助。但是,它确实解决了编译时错误。但在运行时失败。

我还必须在 app build.gradle 文件中添加以下内容以使其工作。

 android {
     // Other code here...
     kotlinOptions {
        jvmTarget = "1.8"
     }
 }

这行不通。
O
Orposuser

当其他解决方案对您不起作用时(更改编译器设置上的 JVM 版本并将 jvmTarget 添加到您的 build.gradle),因为您的 .iml 文件试图强制其配置,您可以从项目设置更改目标平台。

打开文件 > 项目结构

转到项目设置下的 Facets 如果它是空的,然后单击小 + 按钮

如果它为空,则单击小 + 按钮

单击您的 Kotlin 模块/模块

将目标平台更改为 JVM 1.8(最好检查使用项目设置选项)


我在 Android Studio 中找不到这个或“方面”部分......🤔我不得不手动编辑 app.iml。我将 <configuration version="3" platform="JVM 1.8" useProjectSettings="false"> 设置为 true 并且它起作用了。但是,文件不断变回来!
@Aphex 它实际上在“文件”>“项目结构”下,然后在“项目设置”>“Facets”下,我什么都没有,所以我点击了“+”>“Kotlin”>选择我的项目。那是为我做的:)
这对我有用,但每次我添加到我的 build.gradle.kts 文件时都会被迫回到 1.6。
有没有办法从 gradle 文件中配置和获取它?恕我直言,这个配置错误是 intellij 中的一个错误。
Z
Zoe stands with Ukraine

在我的情况下,直到我将 apply plugin: 'kotlin-android' 从底部移到顶部,此代码才起作用。

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

kotlinOptions { jvmTarget = "1.8" } Didi 是我的诀窍,谢谢
M
Muhammad Maqsood

在 Android Studio 4.3.2 中,通过以下过程添加不起作用。

打开 IntelliJ 首选项转到 Build, Execution, Deployment > Compiler > Kotlin Compiler BUT Other Settings > Kotlin compiler if Android Studio > 3.4 将 Target JVM version 更改为 1.8 点击 Apply

原因是,Android Studio 无法在模块级 Gradle 文件中添加以下代码。请手动添加。

kotlinOptions {
    jvmTarget = "1.8"
}

https://i.stack.imgur.com/VmxAo.png


仅通过手动添加,它对我有用。出于某种原因,android studio 确实存在问题,除非我们通过删除所有缓存重新启动 ide,否则它不会考虑应用更改。
Tnx,您的解决方案对我有用,尽管我需要重新启动 android studio 以使其重新配置项目!
U
USMAN osman

2020 年 2 月 android 3.4+ 转到 File -> Settings -> Kotlin Compiler -> Target JVM Version > 设置为 1.8,然后确保执行 File -> Sync project with Gradle files 或将其添加到 build.gradle(module:app)在 android 块中:

kotlinOptions {
           jvmTarget = "1.8"
         }

确认你需要做 File -> Sync project with Gradle files,然后它就可以工作了
F
Fabian Braun

如果您有许多源集/模块,分别为每个源集/模块配置 jvmTarget 可能会很麻烦。

您可以像这样一次为所有这些配置 jvmTarget:

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

此代码段可用于您的 gradle.build 文件的顶层

修改 gradle 文件 Reimport All Gradle Imports 后。要检查它是否有效,请打开 Project Structure 并验证 IntelliJ 是否将 JVM 1.8 正确分配给所有 Kotlin 模块。它应该如下所示:

https://i.stack.imgur.com/SdndZ.png

我不建议直接在 IntelliJ 中更改平台,因为第一次克隆您的项目的任何其他人都可能面临同样的问题。在 gradle 中正确配置它的优点是 IntelliJ 从一开始就为它们正确运行。


J
Johan Vergeer

正如 Kotlin 网站的 using-maven 文档中所写:

您只需将 <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget> 放入 pom.xml 的属性部分


在尝试了一切之后,你的是唯一对我有用的解决方案
S
Shoaib Mushtaq

就我而言,jvmTarget 已在 build.gradle 文件中设置,如下所示。

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

但我的问题仍然存在。最后,在 Preferences > Other Settings > Kotlin Compiler > Target JVM version 中将 Target JVM version 从 1.6 更改为 1.8 后,它得到了解决。见附图,

https://i.stack.imgur.com/zonA2.png


伟大的帮助,你也拯救了我的一天,谢谢
C
Costa

这有助于我的项目构建,将其添加到模块 build.gradle 文件中:

compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }

A
AdrianoCelentano

对我来说,原因是我的构建 gradle 中的这个配置在某些模块中,而在某些模块中却没有

android {  
...      
kotlinOptions {
        val options = this as KotlinJvmOptions
        options.jvmTarget = "1.8"
    }
...
android {

谢谢,这是唯一对我有用的解决方案。我正在使用 kts 构建文件。
谢谢,这也是对我有用的解决方案。这种方式有很多声明性。 stackoverflow.com/a/57041765/3763032 kevin 也说明了这一点,由于 kotlin gradle 文件 .kts 中的 smartcast,它可以直接使用
V
Vikas Sharma

就我而言,我通过以下两个步骤解决了这个问题

1. Go to android studio preferences -> other settings -> kotlin compiler -> set Target JVM version = 1.8 
   if it doesn't work then go to the second option.

2. In your module-level build.gradle file add 
   compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }

嘿,谢谢你的回答,我必须做第二步,它的工作。你能解释一下为什么需要它吗?
您可以找到有关此已关闭问题的更多详细信息,很高兴知道 [github.com/mikepenz/Android-Iconics/issues/454]
那个链接失效了
它不起作用。
K
Kevin Robatel

对于使用 Kotlin 语言的 Gradle(*.gradle.kts 个文件),添加以下内容:

android {
    [...]
    kotlinOptions {
        this as KotlinJvmOptions
        jvmTarget = "1.8"
    }
}

为什么我们需要将 this 转换为 KotlinJvmOptionskotlinOptions 块中的 this 接收者不是已经 KotlinJvmOptions 了吗?没有演员表,它仍然对我不起作用
@11m0,我认为这与这个问题有关:github.com/gradle/kotlin-dsl-samples/issues/1368
当没有找到 KotlinJvmOptions 时,尝试使用全名“org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions”。
О
Олег Сухих

下一个解决方案帮助了我。添加到 build.gradle

 compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

如果您在没有 android 的情况下使用它,这很有用
n
naXa stands with Ukraine

在大多数情况下,这就足够了:

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

例如,如果您声明了 integrationTest 等自定义 Gradle 任务,请同时为 compile<YourTaskName>Kotlin 添加配置:

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

这也可以通过添加到 gradle 文件来工作 --> compileOptions { sourceCompatibility = 1.8 targetCompatibility = 1.8 } kotlinOptions { jvmTarget = "1.8" }
有趣的是,只有您的解决方案适用于我的非 android 模块!谢谢!
m
mattie

这里的所有答案都使用 gradle 但如果像我这样的人最终来到这里并需要 maven 的答案:

    <build>
        <sourceDirectory>src/main/kotlin</sourceDirectory>
        <testSourceDirectory>src/test/kotlin</testSourceDirectory>

        <plugins>
            <plugin>
                <groupId>org.jetbrains.kotlin</groupId>
                <artifactId>kotlin-maven-plugin</artifactId>
                <version>${kotlin.version}</version>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>compile</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>test-compile</id>
                        <phase>test-compile</phase>
                        <goals>
                            <goal>test-compile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <jvmTarget>11</jvmTarget>
                </configuration>
            </plugin>
        </plugins>
    </build>

kotlin-jvm 与 jetbrains 原型的变化是 <configuration></configuration> 指定 jvmTarget。在我的情况下 11


A
Anoop M Maddasseri

设置 sourceCompatibility = JavaVersion.VERSION_1_8 启用脱糖,但目前无法对 Kotlin 编译器使用的所有 Java 8 功能进行脱糖。

https://i.stack.imgur.com/k77tB.png

修复 - 在应用程序模块 Gradle 中设置 kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8 将修复该问题。

使用 Java 8 语言特性:https://developer.android.com/studio/write/java8-support

android {
  ...
  // Configure only for each module that uses Java 8
  // language features (either in its source code or
  // through dependencies).
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
  // For Kotlin projects
  kotlinOptions {
    jvmTarget = "1.8"
  }
}

k
kigawas

您可能需要同时设置 compileKotlincompileTestKotlin。这适用于 gradle 6.5.1。

compileKotlin {
    kotlinOptions {
        languageVersion = "1.2"
        apiVersion = "1.2"
        jvmTarget = "1.8"
        javaParameters = true   // Useful for reflection.
    }
}

compileTestKotlin {
    kotlinOptions {
        languageVersion = "1.2"
        apiVersion = "1.2"
        jvmTarget = "1.8"
        javaParameters = true   // Useful for reflection.
    }
}

i
ironman

如果你在 android 项目中

在您应用的 build.gradle 下 android{}

android{
//other configs...
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

A
Amin Bahiraee

如果以上答案都不起作用,您可以在 kotlin dsl 中执行此操作

android {
...

    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
}

P
Peter V. Mørch

我正在使用 Kotlin 和 Gradle 进行正常的 JVM 开发(不是 android),这在 build.gradle 中对我有用:

allprojects {
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
        kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
    }
}

V
Vadik

我做了所有步骤但没有成功问题是

implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.4.32'

当我更新到

implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.5.30'

当我回到

implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.4.32'

问题已解决


重建我的项目后,它显示此错误消息“Compose 编译器的此版本 (1.0.3) 需要 Kotlin 版本 1.5.30,但您似乎使用的是未知兼容的 Kotlin 版本 1.4.32。请修复您的配置(或 suppressKotlinVersionCompatibilityCheck 但不要说我没有警告你!)。”
H
Hinotori

如果使用带有 Kotlin 扩展的 Visual Studio Code**,请转到插件管理 Crtl + Shift + x,键入 kotlin 并单击管理(小齿轮)>> 配置扩展设置

在 Kotlin >> 编译器 >> Jvm:Target - 输入 java 版本。在我的情况下,只需输入 1.8

然后重新启动:-)

** vscode 或者只是 linux 的“代码”


W
Waldmann

在我更新了我的 kotlin 插件依赖项之前,没有什么对我有用。试试这个: 1. 使 cahce 无效并重新启动。 2. 同步项目(至少尝试) 3. 转到文件 -> 项目结构 -> 建议 4. 如果有关于 Kotlin 的更新,请更新它。希望它会帮助某人。


最简单的修复
B
Briantical

使用 Kotlin Gradle DSL,这为我解决了这个问题。我将此添加到 build.gradle.kts 中。这是 Joel 答案的补充

val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()

你能分享一下你把它放在文件中的确切位置吗?您使用的是哪个版本的 android 插件和 gradle?
这不是一个安卓项目。我正在运行 Gradle 6.4。
I
Invest

如果您使用 Eclipse 并假设您下载了 Kotlin 插件:

右键项目 -> 属性 -> Kotlin 编译器 -> 启用项目特定设置 -> JVM 目标版本“1.8”


B
Bills

在我的情况下,文件 > 设置 > Kotlin 编译器 > 目标 JVM 版本 > 1.8