尝试通过 IntelliJ 运行示例 CorDapp (GitHub CorDapp) 时,我收到以下错误:
无法将使用 JVM 目标 1.8 构建的字节码内联到使用 JVM 目标 1.6 构建的字节码
如何修改 IntelliJ 设置,以便所有字节码都使用相同的 JVM 目标构建?
build.gradle
依赖项 { compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8") } 来解决此问题
应用程序/build.gradle
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
}
总帐
您可以按如下方式解决此问题:
打开 IntelliJ 首选项
如果 Android Studio > 3.4,请转到构建、执行、部署 > 编译器 > Kotlin 编译器但其他设置 > Kotlin 编译器
将目标 JVM 版本更改为 1.8
单击应用
General
标签下的 Kotlin
Facet 上将 Target platform
更改为 JVM 1.8。
Kotlin Compiler
设置实际上放在 Other Settings
部分。
您应该在 build.gradle 中配置如下内容
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
kotlin-android
插件一起使用吗?
请将此代码添加到您的 app/build.gradle 中的 android 部分
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8
}
就我而言,只是像这样更改目标 JVM 版本:文件 > 设置 > Kotlin 编译器 > 目标 JVM 版本 > 1.8 并没有帮助。但是,它确实解决了编译时错误。但在运行时失败。
我还必须在 app build.gradle 文件中添加以下内容以使其工作。
android {
// Other code here...
kotlinOptions {
jvmTarget = "1.8"
}
}
当其他解决方案对您不起作用时(更改编译器设置上的 JVM 版本并将 jvmTarget
添加到您的 build.gradle
),因为您的 .iml
文件试图强制其配置,您可以从项目设置更改目标平台。
打开文件 > 项目结构
转到项目设置下的 Facets 如果它是空的,然后单击小 + 按钮
如果它为空,则单击小 + 按钮
单击您的 Kotlin 模块/模块
将目标平台更改为 JVM 1.8(最好检查使用项目设置选项)
<configuration version="3" platform="JVM 1.8" useProjectSettings="false">
设置为 true
并且它起作用了。但是,文件不断变回来!
在我的情况下,直到我将 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"
}
}
在 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
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"
}
如果您有许多源集/模块,分别为每个源集/模块配置 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 从一开始就为它们正确运行。
正如 Kotlin 网站的 using-maven 文档中所写:
您只需将 <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
放入 pom.xml 的属性部分
就我而言,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
这有助于我的项目构建,将其添加到模块 build.gradle 文件中:
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
对我来说,原因是我的构建 gradle 中的这个配置在某些模块中,而在某些模块中却没有
android {
...
kotlinOptions {
val options = this as KotlinJvmOptions
options.jvmTarget = "1.8"
}
...
android {
就我而言,我通过以下两个步骤解决了这个问题
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"
}
}
对于使用 Kotlin 语言的 Gradle(*.gradle.kts
个文件),添加以下内容:
android {
[...]
kotlinOptions {
this as KotlinJvmOptions
jvmTarget = "1.8"
}
}
this
转换为 KotlinJvmOptions
。 kotlinOptions
块中的 this
接收者不是已经 KotlinJvmOptions
了吗?没有演员表,它仍然对我不起作用
下一个解决方案帮助了我。添加到 build.gradle
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
在大多数情况下,这就足够了:
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
例如,如果您声明了 integrationTest
等自定义 Gradle 任务,请同时为 compile<YourTaskName>Kotlin
添加配置:
compileIntegrationTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
这里的所有答案都使用 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
设置 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"
}
}
您可能需要同时设置 compileKotlin
和 compileTestKotlin
。这适用于 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.
}
}
如果你在 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"
}
}
如果以上答案都不起作用,您可以在 kotlin dsl 中执行此操作
android {
...
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions {
jvmTarget = "1.8"
}
}
}
我正在使用 Kotlin 和 Gradle 进行正常的 JVM 开发(不是 android),这在 build.gradle
中对我有用:
allprojects {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
}
}
我做了所有步骤但没有成功问题是
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'
问题已解决
suppressKotlinVersionCompatibilityCheck
但不要说我没有警告你!)。”
如果使用带有 Kotlin 扩展的 Visual Studio Code**,请转到插件管理 Crtl + Shift + x,键入 kotlin 并单击管理(小齿轮)>> 配置扩展设置
在 Kotlin >> 编译器 >> Jvm:Target - 输入 java 版本。在我的情况下,只需输入 1.8
然后重新启动:-)
** vscode 或者只是 linux 的“代码”
在我更新了我的 kotlin 插件依赖项之前,没有什么对我有用。试试这个: 1. 使 cahce 无效并重新启动。 2. 同步项目(至少尝试) 3. 转到文件 -> 项目结构 -> 建议 4. 如果有关于 Kotlin 的更新,请更新它。希望它会帮助某人。
使用 Kotlin Gradle DSL,这为我解决了这个问题。我将此添加到 build.gradle.kts 中。这是 Joel 答案的补充
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()
如果您使用 Eclipse 并假设您下载了 Kotlin 插件:
右键项目 -> 属性 -> Kotlin 编译器 -> 启用项目特定设置 -> JVM 目标版本“1.8”
在我的情况下,文件 > 设置 > Kotlin 编译器 > 目标 JVM 版本 > 1.8
不定期副业成功案例分享
kotlinOptions { jvmTarget = "1.8" }
就足够了。compileOptions
和kotlinOptions
去哪儿了?