Как настроить версию кода байта Kotlin в проекте Gradle на Java 8?

В проекте Kotlin, что такое правильный сценарий Gradle, чтобы убедиться, что мои классы будут скомпилированы в байтовый код ver 52 (Java 8)?

По какой-то причине мои классы скомпилированы как ver 50 (Java 6), хотя я установил совместимость с исходными и целевыми. По крайней мере, это то, что Idea показывает мне, когда я открываю файл из каталога build/classes/... после создания проекта.

Моя текущая настройка выглядит так.

 buildscript { ext { kotlinVersion = '1.0.5-2' springBootVersion = '1.4.2.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") } } apply plugin: 'kotlin' apply plugin: 'org.springframework.boot' tasks.withType(JavaCompile) { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } ## I also tried this and it hasn't helped #sourceCompatibility = 1.8 #targetCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}") compile('org.springframework.cloud:spring-cloud-starter-stream-rabbit') } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR2" } } к buildscript { ext { kotlinVersion = '1.0.5-2' springBootVersion = '1.4.2.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") } } apply plugin: 'kotlin' apply plugin: 'org.springframework.boot' tasks.withType(JavaCompile) { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } ## I also tried this and it hasn't helped #sourceCompatibility = 1.8 #targetCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}") compile('org.springframework.cloud:spring-cloud-starter-stream-rabbit') } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR2" } } к buildscript { ext { kotlinVersion = '1.0.5-2' springBootVersion = '1.4.2.RELEASE' } repositories { mavenCentral() } dependencies { classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") } } apply plugin: 'kotlin' apply plugin: 'org.springframework.boot' tasks.withType(JavaCompile) { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } ## I also tried this and it hasn't helped #sourceCompatibility = 1.8 #targetCompatibility = 1.8 repositories { mavenCentral() } dependencies { compile("org.jetbrains.kotlin:kotlin-stdlib:${kotlinVersion}") compile('org.springframework.cloud:spring-cloud-starter-stream-rabbit') } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR2" } } 

Поскольку Марк указал на ответ Debop, вам нужно настроить как compileKotlin и compileTestKotlin . Вы можете сделать это без дублирования таким образом:

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

Для чистого проекта Kotlin я не думаю, что параметры sourceCompatibility и targetCompatibility делают что угодно, поэтому вы можете удалить их.

Ссылка: https://kotlinlang.org/docs/reference/using-gradle.html#compiler-options

Котлин 1.1 в Грейдл. в консоли у вас есть ошибка о inline (ваш установленный компилятор равен 1.0.x). Если вы выполняете задачу gradle в IntelliJ IDEA, ваш код компилируется компилятором kotlin 1.1

 compileKotlin { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 kotlinOptions { jvmTarget = "1.8" apiVersion = "1.1" languageVersion = "1.1" } } 

Kotlin 1.0 всегда создает файлы класса Java 6. Kotlin 1.1 будет поддерживать генерацию файлов класса Java 8, передав -jvm-target 1.8 компилятору. Видеть

https://blog.jetbrains.com/kotlin/2016/07/first-glimpse-of-kotlin-1-1-coroutines-type-aliases-and-more/

для обсуждения поддержки Java 7/8.

Если кто-то использует град с kotlin-dsl вместо groovy:

 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile // compile bytecode to java 8 (default is java 6) tasks.withType<KotlinCompile> { kotlinOptions.jvmTarget = "1.8" } 

Для таких, как я, которые используют maven для создания смешанного кода kotlin и java в intellij, вам нужно установить

 <kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget> 

потому что maven build не учитывает jvmTarget, установленный в настройке проекта.

Intereting Posts
Как я могу вызвать collect (Collectors.toList ()) в потоке Java 8 в Котлине? Разделить строку на каждый n символов Как получить ссылку на пользовательские идентификаторы в значениях / ids.xml Kotlin: Как ленивая инициализация вектора Могу ли я добавить возврат, когда я использую операцию Элвиса в Котлине? Как расширить dataclass с помощью toString Параметр типа Ketlin reified не используется Полиморфизм на функциях расширения в Котлине Код Kotlin, скомпилированный в Jar для использования в Java Project? как использовать весенние аннотации, такие как @Autowired или @Value в kotlin для примитивных типов? Цвет фона и перетасовка изображений в режиме прокрутки в recyclerView Android с помощью группового адаптера Ошибка в android Studio 3.0 при синхронизации градиента. Ошибка. Причина. Не удалось найти допустимый путь сертификации для запрошенной цели. Как получить ALBUM ART песни с ее пути в котлин? Ссылка на набор свойств класса Kotlin как функция Компиляция Android Kotlin