Dans le projet Kotlin, qu'est-ce qu'un bon script Gradle pour s'assurer que mes classes seront compilées en code octet version 52 (Java 8)?
Pour une raison quelconque, mes classes sont compilées en tant que version 50 (Java 6) même si je configure la compatibilité source et cible. Au moins c'est ce que Idea me montre quand j'ouvre un fichier du répertoire build/classes/...
après avoir construit le projet.
Ma configuration actuelle ressemble à ceci.
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" } }
Comme Mark l'a souligné dans la réponse de Debop, vous devez configurer compileKotlin
et compileTestKotlin
. Vous pouvez le faire sans duplication de cette façon:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
Pour un projet Kotlin pur, je ne pense pas que les options sourceCompatibility
et targetCompatibility
servent à quelque chose que vous puissiez peut-être les supprimer.
Réf.: https://kotlinlang.org/docs/reference/using-gradle.html#compiler-options
Kotlin 1.1 dans Gradle. dans la console vous avez une erreur à propos de inline
(votre compilateur installé est 1.0.x) Si vous exécutez une tâche de gradation dans IntelliJ IDEA, votre code compilé par le compilateur kotlin 1.1
compileKotlin {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
kotlinOptions {
jvmTarget = "1.8"
apiVersion = "1.1"
languageVersion = "1.1"
}
}
Si quelqu'un utilise gradle avec kotlin-dsl au lieu de groovy:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
// compile bytecode to Java 8 (default is Java 6)
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
Kotlin 1.0 produit toujours des fichiers de classe Java 6. Kotlin 1.1 prendra en charge la génération de fichiers de classe Java 8 en transmettant -jvm-target 1.8
au compilateur. Voir
pour une discussion sur le support de Java 7/8.
Pour ceux qui comme moi utilisent maven pour construire un code mixte de kotlin et Java dans intellij, vous devez définir
<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
parce que maven build ne respecte pas jvmTarget défini dans les paramètres du projet.
merci pour la réponse de seanf, mais si votre kotlin DSL est 1.3.0:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class.Java).all {
kotlinOptions {
jvmTarget = "1.8"
}
}