JVM 대상 1.8로 빌드 된 바이트 코드를 JVM 대상 1.6으로 빌드중인 바이트 코드로 인라인 할 수 없습니다.


481

IntelliJ를 통해 Example CorDapp ( https://github.com/corda/cordapp-example )를 실행하려고 하면 다음 오류가 발생합니다.

JVM 대상 1.8로 빌드 된 바이트 코드를 JVM 대상 1.6으로 빌드중인 바이트 코드로 인라인 할 수 없습니다.

모든 바이트 코드가 동일한 JVM 대상으로 작성되도록 IntelliJ 설정을 수정하려면 어떻게해야합니까?


5
이 라이브러리를 build.gradle종속성 에 추가하여이 문제를 해결할 수있었습니다. {compile ( "org.jetbrains.kotlin : kotlin-stdlib-jdk8")}
Chandel Munish

1
@MunishChandel 충분하지 않습니다. 우리는 또한 아래의 대답이 제안하는 것을해야합니다 ...
IgorGanapolsky

답변:


1028

app / build.gradle

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

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

GL

Java 8 언어 기능 사용


31
이것이 확인 된 솔루션이어야합니다.
Phil

9
이 날짜와 Android Studio v3.5부터는 나머지를 모두 시도한 후에 작동 한 유일한 솔루션입니다. 설정> Kotlin Compiler에서 동일한 값을 이상하게 설정해도 효과가 없습니다.
user3399299

53
그냥 kotlinOptions { jvmTarget = "1.8" }충분해야합니다.
petter

2
일, 대답은 자명하고 간결하게 작성
카스 펜디 교수

4
"캐시 무효화 및 재시작"
B-GangsteR

214

다음과 같이이 문제를 해결할 수 있습니다.

  • IntelliJ 환경 설정을여십시오
  • 이동 Build, Execution, Deployment> Compiler> Kotlin Compiler 하지만 Other Settings > Kotlin compiler안드로이드 스튜디오의 경우>3.4
  • 변화 Target JVM version에를1.8
  • 딸깍 하는 소리 Apply

6
이 설정을 이미 1.8로 고정했지만 중단 점을 단계별로 실행할 때 여전히이 오류가 표시됩니다. 나는 볼트 쿼리를 칠 때 주로 이것을 본다. 다른 제안이 있으십니까? 이 대상 JVM 비트가 완전히 수정하지 않는 것 같습니다.
Arsalan Khalid

38
프로젝트 구조 , 당신은 또한 변경 확인 Target platformJVM 1.8 당신에 Kotlin세 이하 패싯 General탭을 선택합니다.
Anyul Rivas

7
이 오류는 해결되지 않은 종속성 이있는 경우 나타날 수 있습니다 !
programaths

5
나를 위해 Kotlin Compiler설정은 실제로 Other Settings섹션에 배치되었습니다 .
qwertyfinger

10
적용 후 재시작이 충분하지 않은 경우 → 캐시 재시작 및 무효화.
Bartek Lipinski

104

build.gradle에서 다음과 같이 구성해야합니다.

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

14
또는 대안으로 Gradle Kotlin DSL에서 :tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
breandan

이것을 kotlin-android플러그인 과 함께 사용하는 방법에 대한 아이디어가 있습니까?
ZeroDivide

번거 로움없이 작동합니다. 추천합니다
Mitch

나는 이것을 build.gradle에 있었지만 어떻게 든 IDEA 가이 설정을 덮어 썼습니다. Saeed의 답변이 나를 위해 일했습니다.
nils petersohn

앱 레벨 Gradle의 android {} 섹션에 추가하십시오.
Parag Kadam 08 년

80

필자의 경우 파일> 설정> Kotlin 컴파일러> 대상 JVM 버전> 1.8과 같이 대상 JVM 버전을 변경하면 도움이되지 않습니다. 그러나 컴파일 시간 오류는 해결되었습니다. 그러나 런타임에 실패했습니다.

또한 app build.gradle 파일에 다음을 추가해야 작동합니다.

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

2
매력을 발휘합니다. 감사
데이브 오 그 레이디

공장! 감사합니다
Waldmann

55

다른 솔루션이 작동하지 않은 경우 (컴파일러 설정에 대한 JVM 버전을 변경하고 추가 jvmTarget귀하의에 build.gradle) 때문에 당신의, .iml당신은 프로젝트 설정에서 대상 플랫폼을 변경할 수 있습니다 자신의 구성을 강제로 시도하는 파일입니다.

  • 열다 File > Project Structure
  • Facets아래로 이동Project Settings
    • 비어 있으면 작은 +버튼 을 클릭하십시오
  • Kotlin 모듈 / 모듈을 클릭하십시오
  • 변경 Target Platform에를 JVM 1.8(또한 확인하는 것이 좋습니다 Use project settings옵션)

3
Android Studio에서이 섹션 또는 'facets'섹션을 찾을 수 없습니다 ... 🤔 app.iml을 수동으로 편집해야했습니다. 나는 설정 <configuration version="3" platform="JVM 1.8" useProjectSettings="false">했고 true효과가있었습니다. 그러나 파일은 계속 변경됩니다!
Aphex December

1
@Aphex 실제로 "파일"> "프로젝트 구조"아래에 있고 "프로젝트 설정"> "페이스"아래에 아무 것도 없었으므로 "+"> "Kotlin"> 프로젝트 선택을 클릭했습니다. 그것은 나를 위해 그것을했다 :)
Nicolas Guillaume

이것은 나를 위해 작동하지만 build.gradle.kts 파일에 추가 할 때마다 1.6으로 다시 강제됩니다.
Lou Morda 2019

gradle 파일에서이를 구성하고 선택할 수있는 방법이 있습니까? IMHO 이것은 잘못 구성되어 intellij의 버그입니다.
Jilles van Gurp

35

제 경우에는이 코드 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 나를위한 트릭
Didi

32

Android Studio 4.3.2에서 아래 절차를 통한 추가가 작동하지 않습니다.

  1. IntelliJ 환경 설정을여십시오
  2. 로 이동 , 실행, 배포 빌드 > 컴파일러 > 코 틀린 컴파일러 하지만 기타 설정> 안드로이드 스튜디오의 경우 코 틀린 컴파일러> 3.4
  3. 대상 JVM 버전 을 1.8로 변경하십시오.
  4. 적용을 클릭하십시오

그 이유는 Android 스튜디오가 모듈 수준 Gradle 파일에 아래 코드를 추가 할 수 없기 때문입니다. 수동으로 추가하십시오.

kotlinOptions {
    jvmTarget = "1.8"
}

애드온의 경우 Android Studio 검색에서 대상 JVM 버전 을 검색하십시오. 옵션으로 바로 이동합니다. 여기에 이미지 설명을 입력하십시오


수동으로 추가하는 것만으로도 효과가있었습니다. 어떤 이유로 든 안드로이드 스튜디오는 실제로 버그가 있으며 모든 캐시를 삭제하여 IDE를 다시 시작하지 않으면 변경 사항이 적용되지 않습니다.
Karan Sharma


26

2020 년 2 월
android 3.4+
파일-> 설정-> Kotlin 컴파일러-> 대상 JVM 버전으로 이동하여 1.8로 설정 한 다음 파일-> Gradle 파일과 프로젝트 동기화

또는 build.gradle (module : app)에 추가하십시오 에서 안드로이드 블록 :

kotlinOptions {
           jvmTarget = "1.8"
         }

그냥 "
그라들

파일-> Gradle 파일과 프로젝트 동기화가 필요하다는 것을 확인한 다음 작동합니다.
Irfandi D. Vendy

19

그것은에 기록 된대로 사용-받는다는 코 틀린 웹 사이트에서 문서 :

<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>pom.xml의 properties 섹션에 넣으면 됩니다.


19

많은 소스 세트 / 모듈이있는 경우 각각에 대해 jvmTarget을 개별적으로 구성하는 것이 번거로울 수 있습니다.

다음과 같이 jvmTarget을 모두 한 번에 구성 할 수 있습니다.

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

이 스 니펫은 gradle.build 파일의 최상위 레벨에서 사용할 수 있습니다

gradle 파일을 수정 한 후 Reimport All Gradle Imports. 작동하는지 확인하려면 Project StructureIntelliJ를 열고 JVM 1.8모든 Kotlin 모듈에 올바르게 할당되었는지 확인하십시오 . 다음과 같아야합니다.

프로젝트 구조

나는 것 아니 다른 사람이 처음으로 프로젝트를 복제하기 때문에 동일한 문제에 직면 할 가능성이 IntelliJ를 직접 플랫폼을 변경하는 것이 좋습니다. gradle에서 올바르게 구성하면 IntelliJ가 처음부터 올바르게 작동한다는 이점이 있습니다.


16

내 경우에는이 두 단계를 수행 하여이 문제를 해결했습니다.

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"
        }
    }

대답에 감사드립니다, 나는 2 단계와 그 일을해야했습니다. 왜 필요한지 설명 할 수 있습니까?
hushed_voice

이 폐쇄 된 문제에 대한 자세한 내용은 알아두면 좋습니다 [ github.com/mikepenz/Android-Iconics/issues/454]
Vikas Sharma

그 링크는 죽었다
hushed_voice

12

나에게 이유는 빌드 gradle 의이 구성이 일부 모듈에 있었고 일부는 그렇지 않았기 때문입니다.

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

1
고마워, 이것은 나를 위해 일한 유일한 솔루션이었습니다. kts buiild 파일을 사용하고 있습니다.
Krames

고마워, 이것은 또한 나를 위해 일한 솔루션입니다. 그리고 이런 식으로 많은 선언. stackoverflow.com/a/57041765/3763032 kevin도 kotlin gradle 파일의 스마트 캐스트로 인해 이것을 직접 사용할 수 있습니다
kts

12

Kotlin 언어 ( *.gradle.kts파일)가있는 Gradle의 경우 다음을 추가하십시오.

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

왜 우리는 캐스팅해야합니까 thisKotlinJvmOptions. 블록 의 this수신자 가 아닌가 ? 캐스트 없이는 여전히 작동하지 않습니다kotlinOptionsKotlinJvmOptions
11m0

1
@ 11m0, 나는이 문제와 관련이 있다고 생각합니다 : github.com/gradle/kotlin-dsl-samples/issues/1368
HDW

KotlinJvmOptions를 찾을 수 없으면 "org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions"라는 전체 이름을 사용해보십시오.
HDW

4

대부분의 경우 이것으로 충분합니다 :

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"}
Sanket Patel

흥미롭게도 귀하의 솔루션만이 비 안드로이드 모듈과 함께 작동했습니다! 감사!
Mohammad Omidvar

4

설정 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"
  }
}

3

여기에있는 모든 답변은 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


3

내 kotlin 플러그인 종속성을 업데이트 할 때까지 아무것도 작동하지 않았습니다.
이것을 시도하십시오 :
1. cahce를 무효화하고 다시 시작하십시오.
2. 프로젝트 동기화 (적어도 시도)
3. 파일 -> 프로젝트 구조 -> 제안으로 이동하십시오
. 4. Kotlin에 관한 업데이트가 있으면 업데이트하십시오.
누군가에게 도움이되기를 바랍니다.


가장 쉬운 수정
u84six

2

Kotlin 확장명으로 Visual Studio Code **를 사용하는 경우 플러그인 관리 Crtl + Shift + x로 이동하여 kotlin을 입력하고 관리 (작은 기어)를 클릭하십시오 >> 확장 설정 구성

Kotlin >> Compiler >> Jvm : Target에서 Java 버전을 입력하십시오. 내 상황에서 방금 1.8을 입력했습니다.

그런 다음 다시 시작하십시오 :-)

** vscode 또는 Linux의 경우 '코드'


2

필자의 경우 파일> 설정> Kotlin 컴파일러> 대상 JVM 버전> 1.8


2

나는 안드로이드가 아닌 일반적인 JVM 개발을 위해 Kotlin과 Gradle을 사용하고 있으며 이것은 나를 위해 일했다 build.gradle:

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

1

Kotlin 플러그인을 다운로드했다고 가정하고 Eclipse를 사용하는 경우 :

프로젝트-> 특성-> Kotlin 컴파일러-> 프로젝트 특정 설정 사용-> JVM 대상 버전 "1.8"을 마우스 오른쪽 단추로 클릭하십시오.


1

최신 버전의 Android Studio의 경우 Kotlin Target VM 버전 만 변경해도 작동하지 않습니다.

파일 ➞ 프로젝트 구조 ➞ 모듈 ( app) : "소스 호환성"및 "대상 호환성"을 "1.8 (Java 8)"로 설정하십시오. "확인"을 누르고 Gradle과 프로젝트를 동기화하십시오.


1

당신이 안드로이드 프로젝트에 있다면

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"
    }
}

1

Kotlin Gradle DSL을 사용하면 문제가 해결되었습니다. 나는 이것을 build.gradle.kts에 추가했다. 이것은 Joel 의 답변에 추가됩니다.

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

1
파일에 넣은 위치를 정확히 공유 할 수 있습니까? 그리고 어떤 버전의 안드로이드 플러그인과 gradle을 사용하고 있습니까?
treesAreEverywhere

이것은 안드로이드 프로젝트가 아닙니다. Gradle 6.4를 실행 중입니다.
Briantical

0

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)


0

Spring Boot / Kotlin 프로젝트에서이 메시지가 나타나면 pom.xml에서 "kotlin.compiler.jvmTarget"속성을 "1.8"로 설정하십시오.

    <properties>
        <kotlin.version>1.3.70</kotlin.version>
        <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
    </properties>
    ...

0

필자의 경우 jvmTarget은 이미 build.gradle아래와 같이 파일에 설정되어 있습니다.

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

그러나 내 문제는 여전히있었습니다. 마지막으로 환경 설정> 기타 설정> Kotlin 컴파일러> 대상 JVM 버전에서 대상 JVM 버전을 1.6에서 1.8로 변경하면 해결됩니다. 첨부 된 그림 참조

여기에 이미지 설명을 입력하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.