Kotlinプロジェクトでは、クラスがバイトコードver 52(Java 8)にコンパイルされるようにするための適切なGradleスクリプトとは何ですか?
何らかの理由で、ソースとターゲットの互換性を設定しても、クラスは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" } }
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
誰かがgroovyの代わりにkotlin-dslでgradleを使用する場合:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
// compile bytecode to Java 8 (default is Java 6)
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
GradleのKotlin 1.1。コンソールでは、inline
(インストールされているコンパイラは1.0.xです)に関するエラーがあります。IntelliJIDEAでgradleタスクを実行すると、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は、-jvm-target 1.8
をコンパイラに渡すことにより、Java 8クラスファイルの生成をサポートします。見る
Java 7/8サポートの説明。
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
// JVM target applied to all Kotlin tasks across all subprojects
// Kotlin DSL
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8.toString()
}
//Groovy
tasks.withType(KotlinCompile) {
kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8
}
Mavenを使用してkotlinとJavaの混合コードをビルドする私のような人は、設定する必要があります
<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
mavenビルドはプロジェクト設定で設定されたjvmTargetを尊重しないためです。
seanfのanwserのthxですが、DSL kotlinが1.3.0の場合:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class.Java).all {
kotlinOptions {
jvmTarget = "1.8"
}
}