Как добавить зависимость KotlinPoet в простое консольное приложение?

Я пишу простое консольное приложение, которое должно генерировать код котлина при выполнении. Я столкнулся со странной проблемой: я не могу добавить зависимость от KotlinPoen. Мой build.gradle:

plugins {
    id 'java-library'
    id 'kotlin'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation group: 'com.squareup', name: 'kotlinpoet', version: '1.7.2'
}

Но в PoetApp.kt импорт не удался с сообщением Unresolved reference: squareup:

import com.squareup.kotlinpoet.FunSpec

object PoetApp {

    @JvmStatic
    fun main(vararg param: String) {
        val main = FunSpec.builder("main")
            .addCode("""
        |var total = 0
        |for (i in 0 until 10) {
        |    total += i
        |}
        |""".trimMargin())
            .build()
    }

}

person Dmitry I. Sokolov    schedule 17.03.2021    source источник


Ответы (1)


Вы заявили о совместимости Java с версией 1.7, но эта версия kotlinpoet будет работать только с 1.8 и выше, см. файл библиотеки gradle, а также решены некоторые проблемы совместимости здесь.

Итак, ваш build.gradle должен выглядеть так:

plugins {
    id 'java-library'
    id 'kotlin'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation group: 'com.squareup', name: 'kotlinpoet', version: '1.7.2'
}
person Vojtěch Schlemmer    schedule 17.03.2021