通过在 kotlin-gradle 中使用子项目“未解决的参考:实现”

use*_*928 11 gradle kotlin

我想将我的项目拆分为子项目。IntelliJ IDE 的默认 Gradle 设置是:

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

plugins {
    kotlin("jvm") version "1.3.50"
}

group = "project"
version = "0.0.1-SNAPSHOT"

repositories {
    mavenCentral()
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}
Run Code Online (Sandbox Code Playgroud)

该设置编译。但是我不想在每个子项目中重复该代码。所以我改变了build.gradle.kts

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

subprojects {
    plugins {
        kotlin("jvm") version "1.3.50"
    }

    group = "project"
    version = "0.0.1-SNAPSHOT"

    repositories {
        mavenCentral()
    }

    dependencies {
        implementation(kotlin("stdlib-jdk8"))
    }

    tasks.withType<KotlinCompile> {
        kotlinOptions.jvmTarget = "1.8"
    }
}
Run Code Online (Sandbox Code Playgroud)

但我得到了例外:

e: C:[...]\build.gradle.kts:1:12: 未解析的参考: jetbrains e: C:[...]\build.gradle.kts:16:9: 未解析的参考: 实现 e: C:[...]\build.gradle.kts:19:20: 未解决的参考:KotlinCompile e: C:[...]\build.gradle.kts:19:35: 类型不匹配:推断类型为 () -> 单位但 Class<TypeVariable(S)!>! 预期 e: C:[...]\build.gradle.kts:20:9: Unresolved reference: kotlinOptions

FAILURE:构建失败,出现异常。

  • 其中:构建文件“C:[...]\build.gradle.kts”行:1

  • 出了什么问题:脚本编译错误:

    第 1 行:导入 org.jetbrains.kotlin.gradle.tasks.KotlinCompile ^ 未解决的参考:jetbrains

    第 16 行: implementation(kotlin("stdlib-jdk8")) ^ Unresolved reference: implementation

    第 19 行:tasks.withType { ^ 未解析参考:KotlinCompile

    第 19 行:tasks.withType { ^ Type mismatch: inferred type is () -> Unit but Class<TypeVariable(S)!>! 预料之中

    第 20 行:kotlinOptions.jvmTarget = "1.8" ^ 未解决的参考:kotlinOptions

5 错误

  • 尝试:使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。使用 --scan 运行以获得完整的见解。

  • https://help.gradle.org获取更多帮助

1 秒内构建失败

我认为有一个简单的语法错误,但我找不到。

Fra*_*teo 21

不知道如何你是不是也通过嵌套收到错误plugins { }下块subprojects { }作为陈述插件DSL的局限

plugins {}块还必须是构建脚本中的顶级语句。它不能嵌套在另一个结构中(例如 if 语句或 for 循环)。

因此,要解决您的问题,请将 移到plugins {}顶部并强制应用subprojects {}块中的插件:

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

plugins {
    kotlin("jvm") version "1.3.50" apply false
}

subprojects {
    apply {
        plugin("org.jetbrains.kotlin.jvm")
    }

    group = "project"
    version = "0.0.1-SNAPSHOT"

    repositories {
        mavenCentral()
    }

    val implementation by configurations

    dependencies {
        implementation(kotlin("stdlib-jdk8"))
    }

    tasks.withType<KotlinCompile> {
        kotlinOptions.jvmTarget = "1.8"
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以apply falseMethod details中阅读有关该部分的更多信息,该部分PluginDependenciesSpec是块的类型/范围plugins {}

您可以val implementation by configurations了解当类型安全模型访问器不可用时怎么做中阅读有关该部分的更多信息

  • 你单枪匹马拯救了我的一个项目。我在 Gradle 网站上找到的所有文档都完全没有用。另一方面,你的帖子让我在五分钟内就开始运行。Gradle 应该解雇他们所有的文档部门并雇用你。 (4认同)