2016-12-13 36 views
16

在Kotlin項目中,什麼是合適的Gradle腳本以確保我的類將被編譯爲字節代碼ver 52(Java 8)?如何在Gradle項目中將Kotlin的字節碼版本設置爲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" } } 

回答

11

正如Mark在Debop的回答中指出的那樣,您必須配置compileKotlincompileTestKotlin。你能做到不重複這樣:

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

對於純科特林項目,我不認爲選擇sourceCompatibilitytargetCompatibility做任何事情,所以你可以將其刪除。

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

18

Kotlin 1.1 in Gradle。在控制檯中,您有誤差約inline(已安裝的編譯器是1.0.x的) 如果IntelliJ IDEA的運行gradle這個任務,你的代碼通過科特林1.1編譯器

compileKotlin { 
    sourceCompatibility = JavaVersion.VERSION_1_8 
    targetCompatibility = JavaVersion.VERSION_1_8 

    kotlinOptions { 
     jvmTarget = "1.8" 
     apiVersion = "1.1" 
     languageVersion = "1.1" 
    } 
} 
+4

看起來你可能需要在compileTestKotlin塊複製這此配置也適用於測試代碼。如果我對此有錯,我想知道它和爲什麼。 – Mark

1

編譯對於像我這樣的人誰使用Maven構建混合代碼intellij中的kotlin和java,需要設置爲

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

因爲maven構建不尊重在項目設置中設置的jvmTarget。

+0

應該在哪個文件中設置? –

+0

在你的Pom.xml中,在屬性標籤下。 – happy15

7

如果有人使用gradle這個與科特林-DSL,而不是常規:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile 

// compile bytecode to java 8 (default is java 6) 
tasks.withType<KotlinCompile> { 
    kotlinOptions.jvmTarget = "1.8" 
} 
相關問題