2016-12-13 7 views
16

Kotlinプロジェクトでは、クラスがバイトコードver 52(Java 8)にコンパイルされるようにするための適切なGradleスクリプトは何ですか?GradleプロジェクトでKotlinのバイトコードバージョンをJava 8に設定する方法は?

私のクラスは、ソースとターゲットの互換性を設定していても、バージョン50(Java 6)としてコンパイルされています。少なくともこれは、プロジェクトをビルドした後、build/classes/...というディレクトリからファイルを開くと、Ideaが私に示すものです。

現在の設定は、このようになります。

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の両方を設定する必要があります。あなたが重複することなく、このようにそれを行うことができます:純粋なKotlinプロジェクトについて

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。 IntelliJ IDEAでGradleのタスクを実行する場合は、コンソールでは、あなたは、あなたのコードは、混合コードをビルドするためにMavenを使う私のような人にとって1.1コンパイラ

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

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

が見えますテストコード。私がこれについて間違っていたら、それについて、なぜそれが知りたいのですか? – Mark

1

をkotlinによってinlineに関するエラー(インストールしたコンパイラが1.0.xの場合) まとめましたIntelliJの中kotlinとJavaを、あなたはMavenのビルドは、プロジェクトの設定でjvmTargetセットを尊重していないため、

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

を設定する必要があります。

+0

これはどのファイルで設定する必要がありますか? –

+0

Pom.xmlでは、プロパティタグの下にあります。 – happy15

7

場合、誰かがkotlin-DSLの代わりに、グルーヴィーでのGradle使用しています。あなたもこの設定を適用するためにcompileTestKotlinブロックでこれを複製する必要があるかもしれないよう

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

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