В проекте 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
компилятору. Видеть
для обсуждения поддержки 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, установленный в настройке проекта.