尝试通过IntelliJ 运行Example CorDapp(https://github.com/corda/cordapp-example)时,出现以下错误:
无法将使用JVM target 1.8构建的字节码内联到使用JVM target 1.6构建的字节码中
如何修改IntelliJ设置,以使所有字节码都使用相同的JVM目标构建?
尝试通过IntelliJ 运行Example CorDapp(https://github.com/corda/cordapp-example)时,出现以下错误:
无法将使用JVM target 1.8构建的字节码内联到使用JVM target 1.6构建的字节码中
如何修改IntelliJ设置,以使所有字节码都使用相同的JVM目标构建?
Answers:
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8.toString()
}
}
GL
kotlinOptions { jvmTarget = "1.8" }
就足够了。
您可以按以下方式解决此问题:
Build, Execution, Deployment
> Compiler
> Kotlin Compiler
但 Other Settings
> Kotlin compiler
Android是否工作室>3.4
Target JVM version
为1.8
Apply
Target platform
为JVM 1.8。Kotlin
General
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
插件一起使用?
就我而言,只是像这样更改目标JVM版本:“文件”>“设置”>“ Kotlin编译器”>“目标JVM版本”> 1.8并没有帮助。但是,它确实解决了编译时错误。但是在运行时失败。
我还必须在应用程序build.gradle文件中添加以下内容才能使其正常工作。
android {
// Other code here...
kotlinOptions {
jvmTarget = "1.8"
}
}
如果其他解决方案对您不起作用(在Compiler设置上更改JVM版本并添加jvmTarget
到中build.gradle
),由于.iml
文件试图强制其配置,则可以从Project Settings中更改目标平台。
File > Project Structure
Facets
下Project Settings
+
按钮Target Platform
为JVM 1.8
(也最好检查Use project settings
选项)<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中,无法通过以下过程进行添加。
原因是,Android Studio无法在模块级别的Gradle文件中添加以下代码。请手动添加。
kotlinOptions {
jvmTarget = "1.8"
}
2020年2月
android 3.4+
转到文件->设置-> Kotlin编译器->目标JVM版本>设置为1.8,然后确保执行文件->用Gradle文件同步项目,
或将其添加到build.gradle(module:app)在android块中:
kotlinOptions {
jvmTarget = "1.8"
}
正如它在using-maven中所写 Kotlin网站文档中:
您只需要<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
在pom.xml的properties部分中放入
如果您有许多源集/模块,则为每个源集/模块分别配置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模块。它看起来应该像这样:
我不建议直接在IntelliJ中更改平台,因为其他任何人第一次克隆您的项目都可能会遇到相同的问题。在gradle中正确配置它的优点是IntelliJ将从一开始就对它们正确运行。
就我而言,我按照以下两个步骤解决了这个问题
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"
}
}
对我来说,原因是我的构建gradle中的此配置位于某些模块中,而在某些模块中则不是
android {
...
kotlinOptions {
val options = this as KotlinJvmOptions
options.jvmTarget = "1.8"
}
...
android {
对于使用Kotlin语言的Gradle(*.gradle.kts
文件),请添加以下内容:
android {
[...]
kotlinOptions {
this as KotlinJvmOptions
jvmTarget = "1.8"
}
}
this
到KotlinJvmOptions
。this
接收器还不是在kotlinOptions
街区KotlinJvmOptions
吗?如果没有演员,这对我来说仍然行不通
在大多数情况下,这就足够了:
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
如果您已声明自定义Gradle任务integrationTest
(例如),请为compile<YourTaskName>Kotlin
:
compileIntegrationTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
设置sourceCompatibility = JavaVersion.VERSION_1_8
可启用除糖功能,但目前无法对Kotlin编译器使用的所有Java 8功能进行除糖。
修复- kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8
在应用模块Gradle中进行设置将解决此问题。
使用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"
}
}
这里所有的答案都在使用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
如果您在android项目中
在您的应用的android {}下的build.gradle中
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 Gradle DSL,这为我解决了这个问题。我将此添加到build.gradle.kts。这是乔尔的回答
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()
给Eclipse用户的另一个提示。仔细检查其他用户指出的jvm目标设置后,我仍然遇到相同的问题,这是由于缺少Kotlin Runtime Library引起的。例如,当使用spring initializr创建项目时,不会自动添加该项目。要添加:right click on your project -> Build path -> Add libraries... -> User Library
,只需添加org.jetbrains.kotlin.core.KOTLIN_CONTAINER
确保之后刷新Gradle项目(right click -> Gradle -> Refresh gradle project
)
就我而言,jvmTarget已在build.gradle
文件中设置如下。
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
但是我的问题仍然存在。最后,在“首选项”>“其他设置”>“ Kotlin编译器”>“目标JVM版本”中将目标JVM版本从1.6更改为1.8之后,该问题得以解决。见附图,
build.gradle
依赖项中,我能够解决此问题{compile(“ org.jetbrains.kotlin:kotlin-stdlib-jdk8”)}