Не вдається вбудовувати байтовий код, побудований із ціллю JVM 1.8, у байт-код, який будується з ціллю JVM 1.6


480

При спробі запустити приклад CorDapp ( https://github.com/corda/cordapp-example ) через IntelliJ, я отримую таку помилку:

Не вдається вбудовувати байтовий код, побудований із ціллю JVM 1.8, у байт-код, який будується з ціллю JVM 1.6

Як я можу змінити налаштування IntelliJ, щоб усі байт-коди були побудовані з однаковою ціллю JVM?


5
Мені вдалося вирішити цю проблему, додавши цю бібліотеку до build.gradleзалежностей {compile ("org.jetbrains.kotlin: kotlin-stdlib-jdk8")}
Munish Chandel

1
@MunishChandel Це недостатньо. Ми також повинні зробити те, що пропонує відповідь нижче ...
ІгорГанапольський

Відповіді:


1026

app / build.gradle

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

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

ГЛ

Використовуйте мовні функції Java 8


31
Це має бути перевірене рішення.
Філ

9
Станом на цю дату та Android Studio v3.5 це єдине рішення, яке спрацювало, спробувавши всі інші. Як не дивно, якщо встановлення одного і того ж значення в Налаштуваннях> Kotlin Compiler не впливає.
користувач3399299

52
Просто kotlinOptions { jvmTarget = "1.8" }повинно вистачити.
Петтер

2
працювали, а відповідь написана
Вікас Пандей

4
Тоді слід "визнати недійсним кеш і перезапустити"
B-GangsteR

214

Виправити цю проблему можна таким чином:

  • Відкрийте налаштування IntelliJ
  • Перейти до Build, Execution, Deployment> Compiler> Kotlin Compiler АЛЕ Other Settings > Kotlin compilerякщо Android Studio>3.4
  • Змініть Target JVM versionна1.8
  • Клацніть Apply

6
Я вже встановив це налаштування на 1,8, але я все ще бачу цю помилку під час переходу через точки прориву. Я в першу чергу це бачу, коли потрапляє на сховища. Будь-які додаткові пропозиції? Здається, цей цільовий біт JVM не виправляє його повністю.
Арсалан Халід

38
У структурі проекту переконайтесь, що ви також змінили Target platformна JVM 1.8 на Kotlinфасеті під Generalвкладкою.
Анюл Рівас

7
Ця помилка може з’явитися, якщо існує невирішена залежність !
програмисти

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
Або в іншому випадку у DSL Gradle Kotlin:tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.jvmTarget = "1.8" }
грудня, 18:21

Будь-яка ідея, як змусити це працювати з kotlin-androidплагіном?
ZeroDivide

Працює без особливих клопотів. Я б рекомендував
Мітч

У мене це було в build.gradle, але я чомусь IDEA переробив цей параметр. Відповідь Саїда працювала на мене.
nils petersohn

Додайте це в розділ андроїд Gradle на рівні програми {}.
Параг Кадам

80

У моєму випадку просто змінити цільову версію JVM так: Файл> Налаштування> Компілятор Kotlin> Цільова версія JVM> 1.8 не допомогло. Однак вона вирішила помилку часу компіляції. Але не вдалося виконати.

Я також повинен був додати наступне у файл build.gradle програми, щоб він працював.

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

2
працює принадністю. дякую
dave o grady

працює! дякую
Вальдманн

55

Якщо інші рішення не спрацювали для вас (Зміна версії JVM на налаштуваннях компілятора та додавання jvmTargetу ваші build.gradle), через те, що ваші .imlфайли намагаються примусити їх конфігурації, ви можете змінити цільову платформу з налаштувань проекту.

  • відчинено File > Project Structure
  • Перейти до FacetsпідProject Settings
    • Якщо він порожній, натисніть на маленьку +кнопку
  • Клацніть на ваш модуль / модулі Kotlin
  • Змініть Target Platformна JVM 1.8(також краще перевірити Use project settingsваріант)

3
Я не можу знайти це або розділ «Фасетки» в Android Studio ... 🤔 Мені довелося редагувати app.iml вручну. Я поставив <configuration version="3" platform="JVM 1.8" useProjectSettings="false">в trueі це спрацювало. Однак файл не змінюється назад!
Афекс

1
@Aphex Це насправді в розділі "Файл"> "Структура проекту", потім в розділі "Налаштування проекту"> "Грані", у мене там нічого не було, тому я натиснув "+"> "Котлін"> Виберіть мій проект. Це зробило для мене :)
Ніколас Гійом

Це працює для мене, але примусово повертаюсь до 1.6 кожного разу, коли я додаю у свій файл build.gradle.kts.
Лу Морда

Чи є спосіб налаштувати це та забрати з файлу gradle? IMHO це неправильне налаштування - це помилка в Intellij.
Джиллес ван Гурп

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"} Діди фокус для мене, thx
Діді

32

В Android Studio 4.3.2 додавання за допомогою наведеної нижче процедури не працює.

  1. Відкрийте налаштування IntelliJ
  2. Перейдіть до програми " Створення, виконання, розгортання" > " Компілятор" > " Компілятор" Kotlin АЛЕ Інші параметри> Котлин компілятор , якщо Android Studio> 3,4
  3. Змініть версію Target JVM на 1,8
  4. Натисніть Застосувати

Причина в тому, що Android-студія не в змозі додати код нижче у файл Gradle на рівні модуля. Будь ласка, додайте його вручну.

kotlinOptions {
    jvmTarget = "1.8"
}

Тільки для додатка, шукайте версію Target JVM у пошуку студії Android. Це призведе вас безпосередньо до варіанту. введіть тут опис зображення


тільки додавши вручну, це працювало для мене. Чомусь андроїд-студія дійсно баггі, і вона не враховує застосовані зміни, якщо ми не перезапустимо ідею, видаливши весь кеш.
Каран-Шарма


26

Лютий 2020
android 3.4+
Перейдіть у файл -> налаштування -> компілятор Kotlin -> цільова версія JVM> встановіть 1,8 та переконайтесь, що потрібно зробити Файл -> синхронізувати проект з файлами Gradle

або додати це у build.gradle (модуль: додаток) в блоці Android :

kotlinOptions {
           jvmTarget = "1.8"
         }

просто "Синхронізувати проект з файлами Gradle" працює для мене ..
Акаш Бісарія

підтвердив, що вам потрібно зробити Файл -> Синхронізувати проект з файлами Gradle, тоді він працює
Ірфанді Д. Венді

19

Як написано в документах-програмах з використанням maven з веб-сайту Котлін:

Вам просто потрібно помістити <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>в розділ про властивості вашого pom.xml


19

Якщо у вас є безліч наборів джерел / модулів, можна налаштувати конфігурацію 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 буде вести себе правильно з самого початку.


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

Ей, дякую за відповідь, я повинен був зробити другий крок, і його робота. Чи можете ви пояснити, для чого це потрібно?
hushed_voice

ви можете дізнатися більше деталей у цьому закритому питанні, що це добре знати [ github.com/mikepenz/Android-Iconics/isissue/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 Кевін також заявив про це, завдяки smartcast у файлах kotlin gradle .kts доступний безпосередньо
mochadwi

12

Для Gradle з мовою Kotlin ( *.gradle.ktsфайли) додайте це:

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

Чому ми повинні гіпс thisдо KotlinJvmOptions. thisУ kotlinOptionsблоці вже немає приймача KotlinJvmOptions? І все-таки це не працює для мене без акторів
11м0,

1
@ 11m0, я вважаю, що це пов’язано з цим питанням: github.com/gradle/kotlin-dsl-samples/isissue/1368
HDW

Коли KotlinJvmOptions не знайдено, спробуйте скористатися повним ім'ям "org.jetbrains.kotlin.gradle.dsl.KotlinJvmOptions".
HDW

4

у більшості випадків цього достатньо:

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

якщо ви оголосили власні завдання Gradle, integrationTestнаприклад, додайте конфігурацію compile<YourTaskName>Kotlinтакож:

compileIntegrationTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

це також буде працювати, додавши до файлу gradle -> compileOptions {sourceCompatibility = 1.8 targetCompatibility = 1,8} kotlinOptions {jvmTarget = "1.8"}
Sanket Patel

що цікаво, тільки ваше рішення працювало з моїм не-андроїдним модулем! Дякую!
Мохаммед Омідвар

4

Налаштування sourceCompatibility = JavaVersion.VERSION_1_8дозволяє дегугарити, але наразі не вдається знешкодити всі функції Java 8, якими використовується компілятор Kotlin.

введіть тут опис зображення

Виправлення - налаштування kotlinOptions.jvmTarget to JavaVersion.VERSION_1_8в модулі додатків Gradle вирішило б проблему.

Використовуйте мову мови 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>

Зміна архетипу jetbrains для kotlin-jvm є <configuration></configuration>заданням jvmTarget. У моєму випадку 11


3

Ніщо не працювало для мене, поки я не оновив свою залежність від плагіна kotlin.
Спробуйте це:
1. Недійсний кеш і перезапуск.
2. Синхронізуйте проект (принаймні, спробуйте).
3. Файл -> Структура проекту -> Пропозиції
4. Якщо є оновлення щодо Котліна, оновіть його.
Сподіваюся, це комусь допоможе.


найпростіший виправлення
u84six

2

Якщо ви використовуєте Visual Studio Code ** з розширенням Kotlin, перейдіть до управління плагінами Crtl + Shift + x, введіть kotlin і натисніть на управління (маленька передача) >> Налаштування параметрів розширення

on Kotlin >> Compiler >> Jvm: Target - введіть версію java. У моїй ситуації просто набрали 1,8

А потім перезапустіть :-)

** vscode або просто "код" для Linux


2

У моєму випадку Файл> Налаштування> Компілятор Kotlin> Цільова версія JVM> 1.8


2

Я використовую Kotlin та Gradle для нормального розвитку JVM (а не андроїд), і це працювало для мене у build.gradle:

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

1

Якщо ви використовуєте Eclipse, якщо ви завантажили плагін Kotlin:

Клацніть правою кнопкою миші проект -> Властивості -> Котлінський компілятор -> Увімкнути конкретні параметри проекту -> Цільова версія JVM "1,8"


1

Для останніх версій Android Studio, якщо змінити лише версію Kotlin Target VM, не вийшло.

Файл ➞ Структура проекту ➞ Модулі ( app): встановіть як «Сумісність із джерелами», так і «Цільова сумісність» на «1,8 (Java 8)». Натисніть "ОК" і синхронізуйте проект з Gradle.


1

якщо ви в проекті 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"
    }
}

1

За допомогою DSL Kotlin Gradle це вирішило проблему для мене. Я додав це до build.gradle.kts. Це на додаток до відповіді Джоела

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

1
Чи можете ви, будь ласка, поділитися, де саме у файлі ви це помістили? А яку версію Android-плагіна та gradle ви використовуєте?
дереваAreEverywhere

Це не проект Android. Я бігаю Gradle 6.4.
Брианічний

0

Ще одна підказка для користувачів Eclipse. Після подвійної перевірки параметрів jvm target, які вказали інші користувачі, у мене все-таки виникла та сама проблема, і це було викликано відсутністю бібліотеки виконання програми 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, просто встановіть для властивості "kotlin.compiler.jvmTarget" значення "1,8" у своєму pom.xml.

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

Але моє питання все-таки було. Нарешті, це вирішується після зміни цільової версії JVM з 1.6 на 1.8 у Налаштуваннях> Інші настройки> Компілятор Kotlin> Цільова версія JVM. дивіться додане зображення,

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.