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