Настройте Gradle для Kotlin с Java 1.7 - PullRequest
0 голосов
/ 17 сентября 2018

Хорошо, я новичок в Грэдле и Котлине, и мне трудно понять, как все здесь склеивается ...

Мне нужно настроить проект, который должен работать на 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"
    }
}

Теперь вопросы:

  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, который будет работать с Java 7? Я буду скучать по многим вещам для его использования?

  2. Я хочу понять, какие 3 kotlin я должен был настроить в сценарии. Поправьте меня пожалуйста:

    • kotlin-gradle-plugin: используется для определения, какую версию Kotlin я буду использовать (?)
    • apply plugin: 'kotlin': Насколько я знаю из Gradle, это должно добавить задачи для работы с Kotlin, но при запуске gradle tasks Я не видел ничего другого ... Так для чего он на самом деле?
    • kotlin-stdlib-jdk7: Я предполагаю, что это библиотека Kotlin функций, классов и т. Д. Однако я не понимаю, в чем разница между stdlib и stdlib-jdk7. Документация гласит, что она содержит «дополнительные функции расширения». Но какие? Кроме того, я должен определить версию для этого парня? Или он автоматически подхватывает kotlin-gradle-plugin версию?

Заранее спасибо,

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

В настоящее время компилятору языка Kotlin требуется JDK 8 для запуска. проект , скомпилированный с Kotlin, может быть нацелен на любую Java, начиная с Java 6.

Рецепт для настройки сборки Gradle проекта, работающего на Java 7, выглядит следующим образом:

  • запустить Gradle с Java 8 или новее
  • для всех задач компиляции Kotlin
    • указать jvmTarget = "1.6" в kotlinOptions
    • указать путь к JDK 7 в jdkHome вkotlinOptions
  • , если ваш проект содержит код Java, укажите sourceCompatibility, targetCompatibility свойства соглашения плагина Java
  • укажите следующие 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"
}
0 голосов
/ 17 сентября 2018
  1. Kotlin может ориентироваться либо на Java 6, либо на Java 8, и я не думаю, что это изменилось.Однако вполне вероятно, что значение по умолчанию изменилось с Java 6 на Java 8, поэтому попробуйте, как указано здесь :

    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 добавляет некоторые задачи под капот - просто продолжайте использовать Java-задачи, такие как gradle assemble, gradle build и gradle run поскольку они будут вызывать специфические для kotlin задачи

  4. kotlin-stdlib-jdk7 добавляет очень мало значения - если только вы не используете функции библиотеки Java, которые были представлены в Java 7 и которые имеют расширения от stdlib Kotlin, вы можете просто использовать стандартный stdlib (который нацелен на Java 6 и в любом случае является зависимостью kotlin-stdlib-jdk7).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...