如何设置Kotlin';Gradle项目中的s字节码版本到Java 8?
在Kotlin项目中,什么是合适的Gradle脚本来确保我的类将被编译成字节码Ver52(Java8) 出于某种原因,尽管我设置了源代码和目标代码的兼容性,我的类还是编译为Ver50(Java6)。至少当我在构建项目后从目录如何设置Kotlin';Gradle项目中的s字节码版本到Java 8?,gradle,kotlin,Gradle,Kotlin,在Kotlin项目中,什么是合适的Gradle脚本来确保我的类将被编译成字节码Ver52(Java8) 出于某种原因,尽管我设置了源代码和目标代码的兼容性,我的类还是编译为Ver50(Java6)。至少当我在构建项目后从目录build/classes/…打开文件时,Idea向我展示了这一点 我当前的设置如下所示 buildscript { ext { kotlinVersion = '1.0.5-2' springBootVersion = '1.4.2.
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" } }
Kotlin1.0总是生成Java6类文件。Kotlin 1.1将通过向编译器传递
-jvm目标1.8
来支持生成Java 8类文件。看
有关Java 7/8支持的讨论。Gradle中的Kotlin 1.1。在控制台中,您有关于
内联的错误(您安装的编译器是1.0.x)
如果在IntelliJ IDEA中运行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"
}
}
对于像我这样使用maven在intellij中构建kotlin和java混合代码的人,您需要设置
<kotlin.compiler.jvmTarget>1.8</kotlin.compiler.jvmTarget>
1.8
因为maven build不尊重项目设置中设置的jvmTarget。正如Mark在Debop的回答中指出的,您必须同时配置compileKotlin
和compileTestKotlin
。您可以这样做,而无需重复:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.kotlincomfile)。所有{
科特洛普斯酒店{
jvmTarget=“1.8”
}
}
对于纯Kotlin项目,我认为sourceCompatibility
和targetCompatibility
选项没有任何作用,因此您可以删除它们
参考:如果有人将gradle与kotlin dsl一起使用,而不是groovy:
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
// compile bytecode to java 8 (default is java 6)
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
import org.jetbrains.kotlin.gradle.tasks.kotlincomfile
//将字节码编译为Java8(默认值为Java6)
tasks.withType{
kotlinOptions.jvmTarget=“1.8”
}
thx用于seanf的anwser,但如果您的DSL kotlin为1.3.0:
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class.java).all {
kotlinOptions {
jvmTarget = "1.8"
}
}
import org.jetbrains.kotlin.gradle.tasks.kotlincomfile
//JVM目标应用于所有子项目中的所有Kotlin任务
//科特林DSL
tasks.withType{
kotlinOptions.jvmTarget=JavaVersion.VERSION_1_8.toString()
}
//棒极了
tasks.withType(KotlUncompile){
kotlinOptions.jvmTarget=JavaVersion.VERSION_1_8
}
在您的build.gradle.kts
中:
tasks {
val java = "11"
compileKotlin {
kotlinOptions { jvmTarget = java }
sourceCompatibility = java
}
}
或者像这样:
tasks {
withType<KotlinCompile> { kotlinOptions { jvmTarget = "11" } }
}
任务{
使用类型{kotlinOptions{jvmTarget=“11”}
}
如果您遇到如下错误:
无法将使用JVM目标1.8构建的字节码内联到使用JVM目标1.6构建的字节码中。请指定正确的“-jvm目标”选项
然后,您可以简单地在build.gradle
(Groovy中)中添加以下内容,以便告诉kotlin使用1.8进行构建
compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}
看起来您可能需要在compileTestKotlin块中复制此配置,才能将此配置应用于测试代码。但是,如果我错了,我想知道为什么。应该在哪个文件中设置它?在Pom.xml中,在properties标签下。知道如何使用Kotlin DSL为compileKotlin
和compileTestKotlin
配置不同的JVM目标吗?我会这样做:org.jetbrains.Kotlin.gradle.tasks.KotlinCompile::class.java
@seanf你知道在gradle中扩展KotlinCompile
任务的方法吗?我想写我自己的kotlincompiletestkotlin
任务如何才能为compileTestKotlin
实现同样的目标?@jivimbergcompileTestKotlin
也是kotlinCompile
类型,因此,tasks.withType
块将配置项目中的所有KotlinCompile
任务。我认为这对@mkobitt两个任务都是这样的:tasks.withType{kotlinOptions.jvmTarget=“1.8”}
kotlin dsl
在感谢发帖时已经得到了更好的语法回答,但是您的回答如何改进了其他人?它是否有一些已经提供的答案中缺少的东西?这是使用常量的少数答案的组合,并提供了最惯用的解决方案-理想的测试方法。为了使测试正常工作,我还必须添加一个具有相同值的compileTestKotlin
块。
compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
}
}