dsl 中的子项目 var 类型

Subprojects var type in dsl

我正在将我的代码转换为 Kotlin DSL,因为我有多模块应用程序,所以我有一些技巧可以将 gralde 任务(如清理、构建等)转换到其他模块。所以我在 gradle 中有以下方法:

private static def getSubProjectTasks(subprojects, taskName) {
    def tasks = []
    subprojects.each { Project project ->
        if (project.subprojects.size() == 0) {
            def relativeModulePath = project.path.replace(":feature:", "")
            tasks.add("$relativeModulePath:$taskName")
        }
    }
    return tasks
}

现在尝试过渡到 kotlin dsl 我是从这种方式开始的

fun getSubProjectTasks(subproject: Unit, taskName: String) {
    for(project in subproject) {
        if(project.subprojects.size() == 0) {

        }
    }
}

我不太确定在 Kotlin DSL 中 subproject 是什么类型?这只是一个集合还是单元或如何转换此方法。

您是否尝试过 Iterable<Project>List<Project>Array<Project>

我是根据你的 groovy lambda each.

判断的

您还可以将 for 更改为 map 并让一行完成所有操作:

fun getSubprojectTasks(subprojects: List<Subproject>, taskName: String) = subproject.mapNotNull { project ->
  if(project.subprojects.size == 0) {
    null
  } else {
    "${project.path.replace(":feature:", "")}$taskName"
  }

}