Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set up Kotlin's byte code version in Gradle project to Java 8?

Tags:

gradle

kotlin

In Kotlin project, what is a proper Gradle script to make sure my classes will be compiled to byte code ver 52 (Java 8)?

For some reason my classes are compiled as ver 50 (Java 6) even though I set up source and target compatibility. At least this is what Idea shows me when I open file from directory build/classes/... after building the project.

My current set up looks like this.

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" } } 
like image 336
wst Avatar asked Dec 13 '16 03:12

wst


People also ask

How do I set Java version in Gradle project?

Right click on the deploy or any other task and select "Open Gradle Run Configuration..." Then navigate to "Java Home" and paste your desired java path.

Which Gradle version for Java 8?

Android Gradle plugin 3.0.

Does Gradle work with Java 8?

A Java version between 8 and 18 is required to execute Gradle. Java 19 and later versions are not yet supported. Java 6 and 7 can still be used for compilation and forked test execution.


2 Answers

As Mark pointed out on Debop's answer, you have to configure both compileKotlin and compileTestKotlin. You can do it without duplication this way:

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

For a pure Kotlin project, I don't think the options sourceCompatibility and targetCompatibility do anything, so you may be able to remove them.

Ref: https://kotlinlang.org/docs/reference/using-gradle.html#compiler-options

like image 69
seanf Avatar answered Sep 24 '22 06:09

seanf


In case someone uses gradle with kotlin-dsl instead of groovy:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile  // compile bytecode to java 8 (default is java 6) tasks.withType<KotlinCompile> {     kotlinOptions.jvmTarget = "1.8" } 
like image 26
guenhter Avatar answered Sep 22 '22 06:09

guenhter