Joe*_*oel 221 android jvm intellij-idea kotlin corda
尝试通过IntelliJ 运行示例CorDapp(https://github.com/corda/cordapp-example)时,收到以下错误:
无法将使用JVM目标1.8构建的字节码内联到使用JVM目标1.6构建的字节码中
如何修改IntelliJ设置,以便所有字节码都使用相同的JVM目标构建?
COR*_*ian 377
android {
...
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
Run Code Online (Sandbox Code Playgroud)
GL
Joe*_*oel 145
您可以按如下方式解决此问题:
Build, Execution, Deployment> Compiler>Kotlin CompilerOther Settings到Kotlin compiler3.4D. *_*eev 114
请将此代码添加到您的 app/build.gradle 中的 android 部分
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_1_8
}
Run Code Online (Sandbox Code Playgroud)
Amu*_*han 71
你应该在build.gradle中配置如下所示的内容
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
Run Code Online (Sandbox Code Playgroud)
Sae*_*umi 54
当其他解决方案不适合您时(在编译器设置上更改JVM版本并添加jvmTarget到您的中build.gradle),由于您的.iml文件试图强制其配置,您可以从项目设置更改目标平台.
File > Project StructureFacetsProject Settings为+(也最好检查Target Platform选项)Ara*_*yan 54
在我的情况下,直到我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"
}
}
Run Code Online (Sandbox Code Playgroud)
小智 45
就我而言,只是像这样更改目标JVM版本:文件>设置> Kotlin编译器>目标JVM版本> 1.8并没有帮助。但是,它确实解决了编译时错误。但是在运行时失败。
我还必须在应用程序build.gradle文件中添加以下内容才能使其正常工作。
android {
// Other code here...
kotlinOptions {
jvmTarget = "1.8"
}
}
Run Code Online (Sandbox Code Playgroud)
USM*_*man 29
2020 年 2 月
android 3.4+
转到文件 -> 设置 -> Kotlin 编译器 -> 目标 JVM 版本> 设置为 1.8,然后确保执行文件 -> 使用 Gradle 文件同步项目
或将其添加到build.gradle(module:app)在android块中:
kotlinOptions {
jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)
Muh*_*ood 26
In Android Studio 4.3.2 adding through the below procedure is not working.
The reason is, Android studio is unable to add the below code in the module level Gradle file. Please add it manually.
kotlinOptions {
jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)
仅针对插件,在android studio搜索中搜索Target JVM版本。它将直接带您进入该选项。

fab*_*ica 25
如果您有许多源集/模块,为每个源集/模块分别配置 jvmTarget 可能会很麻烦。
您可以一次为所有这些配置 jvmTarget,如下所示:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
Run Code Online (Sandbox Code Playgroud)
此代码段可用于 gradle.build 文件的顶层
修改gradle文件后Reimport All Gradle Imports。要检查它是否有效,请打开Project Structure并验证 IntelliJ 是否正确分配JVM 1.8给所有 Kotlin 模块。它应该是这样的:
我不建议直接在 IntelliJ 中更改平台,因为其他人第一次克隆您的项目可能会面临同样的问题。在 gradle 中正确配置它的优点是 IntelliJ 从一开始就会为他们正确运行。
小智 22
就我而言,jvmTarget 已经在build.gradle文件中设置如下。
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
Run Code Online (Sandbox Code Playgroud)
但我的问题仍然存在。最后,在首选项 > 其他设置 > Kotlin 编译器 > 目标 JVM 版本中将目标 JVM 版本从 1.6 更改为 1.8 后,它得到解决。见附图,
小智 21
这有助于我的项目构建,将其添加到模块 build.gradle 文件中:
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
Run Code Online (Sandbox Code Playgroud)
Adr*_*ano 12
对我来说,原因是我的构建gradle中的此配置位于某些模块中,而在某些模块中则不是
android {
...
kotlinOptions {
val options = this as KotlinJvmOptions
options.jvmTarget = "1.8"
}
...
android {
Run Code Online (Sandbox Code Playgroud)
vik*_*rma 12
就我而言,我按照以下两个步骤解决了这个问题
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"
}
}
Run Code Online (Sandbox Code Playgroud)
小智 12
下一个解决方案帮助了我。添加到 build.gradle
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)
Kev*_*tel 11
对于使用Kotlin语言的Gradle(*.gradle.kts文件),请添加以下内容:
android {
[...]
kotlinOptions {
this as KotlinJvmOptions
jvmTarget = "1.8"
}
}
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,这就足够了:
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)
如果您已经声明了自定义 Gradle 任务integrationTest,例如,也添加一个配置compile<YourTaskName>Kotlin:
compileIntegrationTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)
小智 7
这里的所有答案都使用 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>
Run Code Online (Sandbox Code Playgroud)
kotlin-jvm 的 jetbrains 原型的变化是<configuration></configuration>指定了 jvmTarget。在我的情况下 11
设置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"
}
}
Run Code Online (Sandbox Code Playgroud)
您可能需要同时设置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.
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
如果你在 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"
}
}
Run Code Online (Sandbox Code Playgroud)
如果以上答案均无效,您可以在 kotlin dsl 中执行此操作
android {
...
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
kotlinOptions {
jvmTarget = "1.8"
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我执行了所有步骤,但没有成功,问题是
implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.4.32'
Run Code Online (Sandbox Code Playgroud)
当我更新到
implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.5.30'
Run Code Online (Sandbox Code Playgroud)
当我回到时显示了这个问题
implementation 'org.jetbrains.kotlin:kotlin-stdlib:1.4.32'
Run Code Online (Sandbox Code Playgroud)
问题已解决
我正在使用 Kotlin 和 Gradle 进行正常的 JVM 开发(不是 android),这对我有用build.gradle:
allprojects {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString()
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
使用 Kotlin Gradle DSL,这为我解决了这个问题。我将其添加到 build.gradle.kts 中。这是对Joel答案的补充
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46597 次 |
| 最近记录: |