未解决的参考:build.gradle.kts 中的 compileKotlin

Posted

技术标签:

【中文标题】未解决的参考:build.gradle.kts 中的 compileKotlin【英文标题】:Unresolved reference: compileKotlin in build.gradle.kts 【发布时间】:2019-08-22 16:21:45 【问题描述】:

由 build.gradle 构建的 Kotlin 项目成功:

compileKotlin 
    kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8

compileTestKotlin 
    kotlinOptions.jvmTarget = JavaVersion.VERSION_1_8

不错。

但是我需要改成build.gradle.kts

 plugins 
    kotlin("jvm") version "1.2.10"
    id("application")


group = "com.myproject"
version = "1.0-SNAPSHOT"

application 
    mainClassName = "MainKt"


java.sourceCompatibility = JavaVersion.VERSION_1_8

repositories 
    mavenCentral()
    jcenter()


val kotlinVer = "1.2.10"

dependencies 
    compile(kotlin(module = "stdlib-jre8", version = kotlinVer))
    implementation("com.google.code.gson:gson:2.7")
    implementation("com.squareup.okhttp3:logging-interceptor:3.8.0")
    implementation("com.squareup.retrofit2:converter-gson:2.1.0")
    implementation("com.squareup.retrofit2:retrofit:2.5.0")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")



compileKotlin 
    kotlinOptions.jvmTarget = "1.8"

compileTestKotlin 
    kotlinOptions.jvmTarget = "1.8"

现在我得到错误:

Line 32: compileKotlin 
           ^ Unresolved reference: compileKotlin

【问题讨论】:

我在您的构建脚本中没有看到 kotlin 插件。 kotlinlang.org/docs/reference/using-gradle.html @LaksithaRanasingha 我更新了我的帖子。没用。 【参考方案1】:

按照 Kotlin 官方文档 (using Gradle part),我建议在 build.gradle.kts 中使用这样的结构:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins 
    java
    kotlin("jvm") version ("1.3.21")

// repositories, dependencies, etc...
val compileKotlin: KotlinCompile by tasks
val compileTestKotlin: KotlinCompile by tasks

compileKotlin.kotlinOptions 
    jvmTarget = "1.8"

compileTestKotlin.kotlinOptions 
    jvmTarget = "1.8"

【讨论】:

compileTestKotlincompileKotlin 之间应该没有区别。还是我错过了什么?【参考方案2】:

Kotlin Gradle DSL 中存在导致此问题的问题。

https://github.com/gradle/kotlin-dsl-samples/issues/1368

在解决之前,您需要使用以下解决方法。

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> 
    kotlinOptions 
        jvmTarget = "1.8"
    

【讨论】:

关于如何扩展此任务的任何想法?我想创建一个编译 kotlin 文件的自定义任务。 应该先导入KotlinCompileimport org.jetbrains.kotlin.gradle.tasks.KotlinCompile【参考方案3】:

使用withType关键字:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins 
    val kotlin = "1.3.61"
    kotlin("jvm") version kotlin apply false


subprojects 
    repositories  mavenCentral(); mavenLocal() 
    apply(plugin = "org.jetbrains.kotlin.jvm")

    tasks 
        val java: String by project
        withType<KotlinCompile> 
            kotlinOptions  jvmTarget = java ; sourceCompatibility = java; targetCompatibility = java 
        
    



【讨论】:

以上是关于未解决的参考:build.gradle.kts 中的 compileKotlin的主要内容,如果未能解决你的问题,请参考以下文章

【白水日记】使用build.gradle.kts

在 build.gradle.kts 中添加后无法导入类

如何使用 kotlinscript DSL (build.gradle.kts) 通过 url 添加 maven 存储库

如何在 build.gradle.kts 中设置 openApi 生成器全局属性

如何解析和修改build.gradle.kts Kotlin Gradle构建脚本?

kotlin build.gradle.kts配置,支持占位符替换文件中变量