好吧,我是Gradle和Kotlin的新手,我很难理解这里的东西是如何粘合在一起的……
我需要配置一个应该在Java 7上运行的项目(客户端限制-_-),并且我想将Kotlin与它一起使用。
现在,我有以下build.gradle
文件正在运行,但我想问一些在其他地方找不到的事情:
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"
}
}
现在的问题是:
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兼容?我会因为使用它而遗漏很多东西吗?- `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?
提前谢谢你,
发布于 2018-09-19 06:51:27
目前,Kotlin语言的编译器需要运行JDK 8。使用Kotlin编译的项目可以面向从Java 6开始的任何Java。
下面是设置在Java 7上运行的项目的Gradle版本的方法:
kotlinOptions
中指定JDK 7的jdkHome
路径中的jvmTarget = "1.6"
sourceCompatibility
、targetCompatibility
约定属性所有java编译任务的以下options
:isFork = true
forkOptions.javaHome = "<path to JDK 7>"
对于所有测试任务,请将"<path to JDK 7>/bin/java"
指定为
完整示例:
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"
}
发布于 2018-09-17 18:57:03
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 assemble
、gradle build
和gradle run
等java任务,因为它们将调用kotlin特定的tasks
kotlin-stdlib-jdk7
增加的值很少--除非您使用java 7和中引入的、具有来自Kotlin的stdlib扩展的Java库特性,否则您可以只使用默认的stdlib (它以Java6为目标,并且无论如何都是kotlin-stdlib-jdk7
的依赖项)。https://stackoverflow.com/questions/52359686
复制相似问题