使用Java 1.7为Kotlin配置Gradle
好吧,我是Gradle和Kotlin的新手,我很难理解这里的东西是如何粘合在一起的
我需要配置一个应该在Java7上运行的项目(客户端限制--),我想使用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只能“编译”(就是这个词吗?)使用Java8+。是这样吗?这里使用的1.1.1
是正确的版本,还是有一种方法可以使用1.2.70
来处理Java7?我会因为使用它而错过很多东西吗我想了解我必须在脚本上设置的3Kotlin内容。请纠正我:
kotlin-gradle-plugin
:用于定义Kotlin I将使用哪个版本(?)李>apply plugin: 'kotlin'
:据我从Gradle所知,这应该会添加任务来与Kotlin一起工作,但是运行gradle tasks
我没有看到任何不同。。。那么它到底是为了什么李>kotlin-stdlib-jdk7
:我猜这是函数、类等的Kotlin库。但我不明白的是stdlib
和stdlib-jdk7
之间的区别。{a1}表示它包含“加法扩展函数”。但是哪一个呢?还有,我应该为这个家伙定义一个版本吗?或者它会自动选择kotlin-gradle-plugin
版本吗李>
提前感谢,
# 1 楼答案
Kotlin可以针对Java 6或Java 8,我认为这一点没有改变。但是,默认值很可能已从Java 6更改为Java 8,因此请尝试使用suggested here:
kotlin-gradle-plugin
的版本是用来编译代码的Kotlin编译器的版本。stdlib的版本就是运行库的版本。强烈建议在此处使用相同的版本apply plugin: kotlin
在引擎盖下添加了一些任务——只需继续使用java任务,如gradle assemble
、gradle build
和gradle run
,因为它们将调用kotlin特定的任务kotlin-stdlib-jdk7
增加的价值很小——除非您使用java 7和中引入的java库的特性,这些特性具有Kotlin的stdlib的扩展,否则只需使用默认的stdlib就可以了(它以java 6为目标,并且无论如何都是kotlin-stdlib-jdk7
的依赖项)# 2 楼答案
目前,Kotlin语言的编译器需要运行JDK 8。使用Kotlin编译的项目可以针对从Java6开始的任何Java
设置在Java 7上运行的项目的Gradle build的方法如下:
kotlinOptions
中指定jvmTarget = "1.6"
jdkHome
中指定JDK 7的路径在kotlinOptions
sourceCompatibility
、targetCompatibility
约定属性options
:isFork = true
forkOptions.javaHome = "<path to JDK 7>"
executable
指定为"<path to JDK 7>/bin/java"
完整样本: