IntelliJ를 통해 Example CorDapp ( https://github.com/corda/cordapp-example )를 실행하려고 하면 다음 오류가 발생합니다.
JVM 대상 1.8로 빌드 된 바이트 코드를 JVM 대상 1.6으로 빌드중인 바이트 코드로 인라인 할 수 없습니다.
모든 바이트 코드가 동일한 JVM 대상으로 작성되도록 IntelliJ 설정을 수정하려면 어떻게해야합니까?
IntelliJ를 통해 Example CorDapp ( https://github.com/corda/cordapp-example )를 실행하려고 하면 다음 오류가 발생합니다.
JVM 대상 1.8로 빌드 된 바이트 코드를 JVM 대상 1.6으로 빌드중인 바이트 코드로 인라인 할 수 없습니다.
모든 바이트 코드가 동일한 JVM 대상으로 작성되도록 IntelliJ 설정을 수정하려면 어떻게해야합니까?
답변:
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
안드로이드 스튜디오의 경우>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
플러그인 과 함께 사용하는 방법에 대한 아이디어가 있습니까?
필자의 경우 파일> 설정> Kotlin 컴파일러> 대상 JVM 버전> 1.8과 같이 대상 JVM 버전을 변경하면 도움이되지 않습니다. 그러나 컴파일 시간 오류는 해결되었습니다. 그러나 런타임에 실패했습니다.
또한 app build.gradle 파일에 다음을 추가해야 작동합니다.
android {
// Other code here...
kotlinOptions {
jvmTarget = "1.8"
}
}
다른 솔루션이 작동하지 않은 경우 (컴파일러 설정에 대한 JVM 버전을 변경하고 추가 jvmTarget
귀하의에 build.gradle
) 때문에 당신의, .iml
당신은 프로젝트 설정에서 대상 플랫폼을 변경할 수 있습니다 자신의 구성을 강제로 시도하는 파일입니다.
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 스튜디오가 모듈 수준 Gradle 파일에 아래 코드를 추가 할 수 없기 때문입니다. 수동으로 추가하십시오.
kotlinOptions {
jvmTarget = "1.8"
}
애드온의 경우 Android Studio 검색에서 대상 JVM 버전 을 검색하십시오. 옵션으로 바로 이동합니다.
2020 년 2 월
android 3.4+
파일-> 설정-> Kotlin 컴파일러-> 대상 JVM 버전으로 이동하여 1.8로 설정 한 다음 파일-> Gradle 파일과 프로젝트 동기화
또는 build.gradle (module : app)에 추가하십시오 에서 안드로이드 블록 :
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 모듈에 올바르게 할당되었는지 확인하십시오 . 다음과 같아야합니다.
나는 것 아니 다른 사람이 처음으로 프로젝트를 복제하기 때문에 동일한 문제에 직면 할 가능성이 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.kts
파일)가있는 Gradle의 경우 다음을 추가하십시오.
android {
[...]
kotlinOptions {
this as KotlinJvmOptions
jvmTarget = "1.8"
}
}
this
로 KotlinJvmOptions
. 블록 의 this
수신자 가 아닌가 ? 캐스트 없이는 여전히 작동하지 않습니다kotlinOptions
KotlinJvmOptions
대부분의 경우 이것으로 충분합니다 :
compileKotlin {
kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
kotlinOptions.jvmTarget = "1.8"
}
integrationTest
예를 들어 사용자 정의 Gradle 작업을 선언 한 경우 다음 에 대한 구성을 추가하십시오 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 아키 타입 변경은 jvmTarget을 <configuration></configuration>
지정하는 것입니다. 내 경우에는 11
당신이 안드로이드 프로젝트에 있다면
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에 추가했다. 이것은 Joel 의 답변에 추가됩니다.
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()
Eclipse 사용자를위한 또 다른 힌트. 다른 사용자가 지적한 jvm 대상 설정을 다시 확인한 후에도 여전히 동일한 문제가 발생했으며 Kotlin 런타임 라이브러리가 누락 되었기 때문입니다. 예를 들어, 스프링 이니셜 라이저로 프로젝트를 만들 때 자동으로 추가되지 않습니다. 그것을 추가하려면 : 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")}