programing

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

skycolor 2023. 6. 1. 22:37
반응형

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

IntelliJ를 통해 ExampleCorDapp(GitHubCorDapp)을 실행하려고 하면 다음 오류가 발생합니다.

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

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

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 언어 기능 사용

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

  • IntelliJ 환경설정 열기
  • 에 가다Build, Execution, Deployment>Compiler>Kotlin Compiler 그렇지만 Other Settings>Kotlin compilerif Android Studio >3.4
  • 변할내용을 합니다.Target JVM version1.8
  • Apply

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

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

이 코드를 앱/build.gradle 내 안드로이드 섹션에 추가하십시오.

compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_1_8
    }

이 경우 Target JVM Version을 다음과 같이 변경합니다.File > Setting > Kotlin Compiler > Target JVM Version > 1.8은 도움이 되지 않았습니다.그러나 컴파일 시간 오류는 해결됩니다.그러나 런타임에 실패했습니다.

또한 작동하기 위해 app build.gradle 파일에 다음을 추가해야 했습니다.

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

변경 및 )jvmTarget의 신의것에.build.gradle에, 당신때에문에때문..iml구성을 강제로 적용하려는 파일의 경우 프로젝트 설정에서 대상 플랫폼을 변경할 수 있습니다.

  • 을 엽니다.File > Project Structure
  • 에 가다FacetsProject Settings
    • 있다면, ▁on▁the다를 클릭하세요.+단추를 채우다
  • Kotlin 모듈/모듈 클릭
  • 변할내용을 합니다.Target PlatformJVM 1.8 확인하는.)Use project settings옵션)

제 경우 이 코드는 제가 이동할 때까지 작동하지 않았습니다.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에서는 아래 절차를 통해 추가할 수 없습니다.

  1. IntelliJ 환경설정 열기
  2. 빌드, 실행, 배포 > 컴파일러 > Kotlin 컴파일러 BUT 기타 설정 > Android Studio인 경우 Kotlin 컴파일러 > 3.4로 이동합니다.
  3. 대상 JVM 버전을 1.8로 변경
  4. 적용 클릭

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

kotlinOptions {
    jvmTarget = "1.8"
}

애드온의 경우 안드로이드 스튜디오 검색에서 Target JVM 버전을 검색합니다.옵션으로 바로 이동합니다.여기에 이미지 설명 입력

2월 2020년 2월
안드로이드 3.4+
->Version > 1-> filesFile -> Settings -> Target JVM Version > 1.8로 하여 Sync project with Gradle files로 합니다.

또는 Android 블록의 build.gradle(module:app)에 추가합니다.

kotlinOptions {
           jvmTarget = "1.8"
         }

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

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

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

이 스니펫은 그라들의 최상위 레벨에서 사용할 수 있습니다.빌드 파일

파일 후 Gradle 파정수후일후정▁afterReimport All Gradle Imports작동는확열기면려하를 여십시오.Project Structure가 IntelliJ에게 할당되었는지 합니다.JVM 1.8모든 코틀린 모듈에게.다음과 같이 표시되어야 합니다.

프로젝트 구조

저는 IntelliJ에서 플랫폼을 직접 변경하는 것을 권장하지 않습니다. 왜냐하면 당신의 프로젝트를 처음 복제하는 다른 사람들도 동일한 문제에 직면할 가능성이 높기 때문입니다.Gradle에서 올바르게 구성하면 IntelliJ가 처음부터 올바르게 동작한다는 장점이 있습니다.

코틀린 웹사이트의 사용 설명서에 나와 있듯이:

당은그만 넣으면 .<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>.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로 변경한 후 해결됩니다.첨부된 사진을 참조하십시오.

여기에 이미지 설명 입력

이것은 제 프로젝트가 빌드하고 모듈 build.gradle 파일에 추가하는 데 도움이 되었습니다.

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

저에게 그 이유는 빌드 그래들의 이 구성이 일부 모듈에 있었고 일부 모듈에는 없었기 때문입니다.

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

코틀린 언어를 사용하는 Gradle의 경우(*.gradle.kts파일), 추가:

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

다음 해결책은 저에게 도움이 되었습니다.build.gradle에 추가

 compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

대부분의 경우 이 정도면 충분합니다.

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

정의 태스크를 (예: 다과같사은지태경선스우언한를)integrationTest를 들어 예: 구추에 대한 합니다.compile<YourTaskName>Kotlin또한:

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

여기 있는 모든 대답은 그라들을 사용하지만 저 같은 사람이 결국 여기에 와서 메이븐을 위한 대답이 필요하다면:

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

에 대한 브레인 는 코틀린-jvm에대한브원변의터화는부로으형인레트제▁▁the변▁for▁frombr화는type▁jet▁change의▁kot코터vm부틀.<configuration></configuration>jvmTarget 파일을 합니다.의 경우에는 이고 11살입니다.

sourceCompatibility = JavaVersion.VERSION_1_8에서는 디슈가링을 활성화하지만 현재 Kotlin 컴파일러가 사용하는 모든 Java 8 기능을 디슈가링할 수 없습니다.

여기에 이미지 설명 입력

- 정 - 설kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8Gradle은 앱 모듈에서 문제를 해결할 것입니다.

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

안드로이드 프로젝트에 참여하고 있는 경우

앱의 build.grade 아래에 있는 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"
    }
}

위의 답변 중 아무 것도 작동하지 않는 경우 코틀린슬에서 이 작업을 수행할 수 있습니다.

android {
...

    tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
}

저는 모든 단계를 수행했지만 성공하지 못했습니다. 문제는

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'

해결된 문제

저는 (안드로이드가 아닌) 일반적인 JVM 개발을 위해 Kotlin과 Gradle을 사용하고 있으며, 이것은 저에게 효과가 있었습니다.build.gradle:

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

Kotlin Gradle DSL을 사용하여 문제를 해결했습니다.build.gradle.kts에 추가했습니다.이것은 Joel의 답변에 추가된 것입니다.

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

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

on Kotlin >> 컴파일러 >> Jvm:대상 - Java 버전을 입력합니다.내 상황에서는 1.8을 입력했습니다.

그런 다음 다시 시작합니다 :-)

vcode 또는 Linux의 경우 그냥 '코드'

코틀린 플러그인 종속성을 업데이트하기 전까지는 아무 것도 작동하지 않았습니다.
사용해 보십시오.
캐시를 비활성화하고 다시 시작합니다.
프로젝트 동기화(최소한 시도)
Go File -> 프로젝트 구조 -> 제안사항
코틀린에 대한 업데이트가 있으면 업데이트해주세요.
누군가에게 도움이 되길 바랍니다.

코틀린 플러그인을 다운로드했다고 가정하고 이클립스를 사용하는 경우:

project -> Properties -> Kotlin Compiler -> 프로젝트별 설정 활성화 -> JVM target version "1"8"

경우 파일 > 설정 > 코틀린 컴파일러 > 대상 JVM 버전 > 1.8

언급URL : https://stackoverflow.com/questions/48988778/cannot-inline-bytecode-built-with-jvm-target-1-8-into-bytecode-that-is-being-bui

반응형