代码之家  ›  专栏  ›  技术社区  ›  João Menighin

用Java1.7为Kotlin配置Gradle

  •  1
  • João Menighin  · 技术社区  · 6 年前

    好吧,我是新来格拉德尔和科特林的,我很难理解这里的东西是如何粘合在一起的。。。

    我需要配置一个应该在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"
        }
    }
    

    现在的问题是:

    1. kotlin_version = '1.2.70' (最近几天发布!)我犯了个错误 KotlinPluginWrapper : Unsupported major.minor version 52.0 1.1.1 这里用的是正确的版本还是有办法用的 1.2.70 这对Java7有用吗?我会因为使用它而错过很多东西吗?

    2. 我想了解我在脚本上设置的3kotlin的东西。请纠正我:

      • kotlin-gradle-plugin :用于定义Kotlin I将使用的版本(?)
      • apply plugin: 'kotlin' :据我从Gradle所知,这应该会添加一些任务来与Kotlin一起工作,但是正在运行 gradle tasks 我没看到什么不同。。。那它到底是为了什么?
      • kotlin-stdlib-jdk7 stdlib stdlib-jdk7 documentation kotlin gradle插件

    提前谢谢,

    2 回复  |  直到 6 年前
        1
  •  4
  •   Ilya    6 年前

    目前 使用Kotlin语言需要运行jdk8。A 项目

    为在Java 7上运行的项目设置渐变构建的方法如下:

      • 指定 jvmTarget = "1.6" 在里面 kotlinOptions
      • 在中指定JDK 7的路径 jdkHome kotlinOptions公司
    • 如果您的项目包含java代码,请指定 sourceCompatibility targetCompatibility
    • 指定以下内容 options 在所有java编译任务中:
      • isFork = true
      • forkOptions.javaHome = "<path to JDK 7>"
    • 对于所有测试任务,请指定 executable "<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"
    }
    
        2
  •  2
  •   msrd0 Gordon Linoff    6 年前
    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"
          }
      }
      
    2. 的版本 kotlin-gradle-plugin 是用来编译代码的Kotlin编译器的版本。stdlib的版本是运行库的版本。强烈建议在此处使用相同的版本。

    3. 这个 apply plugin: kotlin gradle assemble gradle build gradle run 因为他们将调用kotlin特定的任务

    4. kotlin-stdlib-jdk7 增加的价值很小——除非您使用Java7中引入的java库的特性 kotlin-stdlib-jdk7标准 无论如何)。