通过使用 Kotlin-gradle 中的子项目进行"Unresolved reference: implementation"



我想将我的项目拆分为子项目。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"
}

该设置将编译。但我不想在每个子项目中重复该代码。所以我将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"
}
}

但我得到例外:

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: 类型不匹配: 推断类型是 () -> 单位,但类<类型变量(S)!>!意料之中 e: C:[...]\build.gradle.kts:20:9: 未解析的引用: kotlinOptions

失败:生成失败,出现异常。

  • 地点:构建文件'C:[...]\build.gradle.kts' line: 1

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

    第 01 行:导入 org.jetbrains.kotlin.gradle.tasks.KotlinCompile ^ 未解决的参考:喷气脑

    第 16 行:implementation(kotlin("stdlib-jdk8")) ^ 未解决的参考:实现

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

    第 19 行:tasks.withType { ^ 类型不匹配:推断类型是()->单位,但类<类型变量(S)!>!意料之中

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

5 错误

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

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

构建在 1 秒内失败

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

不确定如何将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"
}
}

您可以在方法详细信息中阅读有关apply false部分的更多信息PluginDependenciesSpec这是plugins {}块的类型/范围。

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

settings.gradle.kts (project)中定义存储库非常重要,以便识别子项目的依赖项。

settings.gradle.kts (project)

pluginManagement {
repositories {
maven("https://dl.bintray.com/kotlin/kotlin-eap")
mavenCentral()
maven("https://plugins.gradle.org/m2/")
}
}
rootProject.name = "project"
include("app")

build.gradle.kts (project)

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
java
kotlin("jvm") version "1.4-M3" apply false
}
subprojects {
apply {
plugin("org.jetbrains.kotlin.jvm")
}
repositories {
maven("https://dl.bintray.com/kotlin/kotlin-eap")
mavenCentral()
}
val implementation by configurations
dependencies {
implementation(kotlin("stdlib-jdk8"))
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
}

要分别为每个子模块定义插件,请使用 lambdaapply { plugin("pluginId") }

build.gradle.kts (:app)

apply {
plugin("org.jetbrains.kotlin.jvm")
}
dependencies {
implementation(kotlin("stdlib-jdk8"))
}

GL

最新更新