首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Java 1.7为Kotlin配置Gradle

使用Java 1.7为Kotlin配置Gradle
EN

Stack Overflow用户
提问于 2018-09-17 09:18:56
回答 2查看 2.8K关注 0票数 2

好吧,我是Gradle和Kotlin的新手,我很难理解这里的东西是如何粘合在一起的……

我需要配置一个应该在Java 7上运行的项目(客户端限制-_-),并且我想将Kotlin与它一起使用。

现在,我有以下build.gradle文件正在运行,但我想问一些在其他地方找不到的事情:

代码语言:javascript
复制
buildscript {
    ext {
        springBootVersion = '1.5.15.RELEASE'
        kotlin_version = '1.1.1'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'

group = 'com.springkotlin'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.7
targetCompatibility = 1.7

repositories {
    mavenCentral()
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-data-rest')
    compile('org.springframework.boot:spring-boot-starter-security')
    compile('com.onelogin:java-saml:2.3.0')
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
    runtime('org.springframework.boot:spring-boot-devtools')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile('org.springframework.security:spring-security-test')
    testCompile group: 'javax.inject', name: 'javax.inject', version: '1'
}

compileKotlin {
    kotlinOptions {
        jvmTarget = "1.6"
    }
}

现在的问题是:

  1. 我尝试过使用kotlin_version = '1.2.70' (最近几天发布的!)我得到了错误KotlinPluginWrapper : Unsupported major.minor version 52.0。我猜这是因为Kotlin 1.2.X只能“编译”(是这个词吗?)使用Java 8+。是那么回事吗?在这里使用1.1.1是正确的版本吗?或者有没有一种方法可以使用1.2.70与Java7兼容?我会因为使用它而遗漏很多东西吗?
  2. 我想要理解我必须在脚本上设置的3kotlin东西。请纠正我:

代码语言:javascript
复制
- `kotlin-gradle-plugin`: Is used to define which version of Kotlin I will be using(?)
- `apply plugin: 'kotlin'`: As far as I know from Gradle, this should add tasks to work with Kotlin but running `gradle tasks` I didn't see anything different... So what is it really for?
- `kotlin-stdlib-jdk7`: I'm guessing this is Kotlin lib of functions, classes, etc. What I don't understand though is the difference between `stdlib` and `stdlib-jdk7`. The [documentation](https://kotlinlang.org/docs/reference/using-gradle.html) says it contains "addition extension functions". But which ones? Also, should I define a version for this guy? Or does it automatically picks up the `kotlin-gradle-plugin` version?

提前谢谢你,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-19 06:51:27

目前,Kotlin语言的编译器需要运行JDK 8。使用Kotlin编译的项目可以面向从Java 6开始的任何Java。

下面是设置在Java 7上运行的项目的Gradle版本的方法:

  • 使用Java8或更高版本运行Gradle
  • 用于所有Kotlin编译任务
    • kotlinOptions

中指定JDK 7的jdkHome路径中的jvmTarget = "1.6"

  • 如果项目包含java代码,请指定Java plugin
  • specify的sourceCompatibilitytargetCompatibility约定属性所有java编译任务的以下options
    • isFork = true
    • forkOptions.javaHome = "<path to JDK 7>"

对于所有测试任务,请将"<path to JDK 7>/bin/java"指定为

完整示例:

代码语言:javascript
复制
sourceCompatibility = 1.7
targetCompatibility = 1.7

def JDK_7 = System.getenv("JDK_7") // or some other way to get path to JDK 7 installation

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
    kotlinOptions {
        jvmTarget = "1.6"
        jdkHome = JDK_7
    }
}

tasks.withType(JavaCompile) {
    options.fork = true
    options.forkOptions.javaHome = file(JDK_7)
}

test {
    executable = "$JDK_7/bin/java"
}
票数 4
EN

Stack Overflow用户

发布于 2018-09-17 18:57:03

  1. Kotlin既可以针对Java6也可以针对Java8,我认为这一点没有改变。但是,默认设置很可能已从Java6更改为Java8,因此可以尝试使用suggested here

compileKotlin { sourceCompatibility = JavaVersion.VERSION_1_6 targetCompatibility = JavaVersion.VERSION_1_6 kotlinOptions { jvmTarget = "1.6“apiVersion = "1.2”languageVersion = "1.2“}}

  • kotlin-gradle-plugin的版本是用于编译代码的Kotlin编译器的版本。stdlib的版本就是运行时库的版本。强烈建议在这里使用相同的版本。

  • apply plugin: kotlin在幕后添加了一些任务--只要继续使用gradle assemblegradle buildgradle run等java任务,因为它们将调用kotlin特定的tasks

  • kotlin-stdlib-jdk7增加的值很少--除非您使用java 7中引入的、具有来自Kotlin的stdlib扩展的Java库特性,否则您可以只使用默认的stdlib (它以Java6为目标,并且无论如何都是kotlin-stdlib-jdk7的依赖项)。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52359686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档