依赖于父项目任务的Gradle子项目任务的语法是什么?

rdlzhqv9  于 2023-03-03  发布在  其他
关注(0)|答案(3)|浏览(199)

我需要有关Gradle构建文件的帮助。我有一些子项目依赖于顶层文件夹中的任务。我只需要将一个test任务拆分为两个单独的测试任务。当前的文件系统结构如下所示(选项卡指示目录中的文件):

top-level-project-folder
    A.gradle
    B.gradle
    C-subproject-folder
        C.gradle
    D-subproject-folder
        D.gradle

A.gradle的内容(重构前):

subprojects {
    tasks.test.dependsOn {
        bTask
    }
}
apply from: 'B.gradle'

C.gradle的内容(重构前):

test {
    ...
}

重构之后,C.gradle需要看起来像:

test {
    ...
}

task runDifferentTests(type : Test) {
    ...
}

棘手的是,C.gradletest任务当前依赖于bTask,但是,在重构之后,C.gradletest任务不应该依赖于bTask,而新的runDifferentTests任务应该依赖于bTask。(当前,D.gradletest任务被标记为依赖于bTask,但实际上它并不依赖于bTask--我希望删除该依赖性。两个子项目中依赖于bTask的唯一任务是新的runDifferentTests任务。)
我试过一些不同的方法,但似乎找不到一个有效的解决办法。

ncecgwcz

ncecgwcz1#

只需删除subprojects中的声明,并直接在C.gradle的子项目中声明依赖项:

runDifferentTests.dependsOn rootProject.bTask
dy1byipe

dy1byipe2#

这里有一些语法解决方案:

runDifferentTests.dependsOn (":bTask")

runDifferentTests.dependsOn rootProject.bTask

task runDifferentTests(type : Test, dependsOn: [":bTask"]) {
...
}

task runDifferentTests(type : Test) {
dependsOn rootProject.bTask
...
}

//in the root build.gradle to apply to all subprojects at once.
subprojects {
    runDifferentTests.dependsOn (":bTask")
}

runDifferentTests.dependsOn {
    tasks.findAll { task -> task.name.startsWith('bTask') }
}

:可用于代替rootProject向上一级,具体取决于首选项和项目结构

v1uwarro

v1uwarro3#

您可以尝试一下(目前使用gradle 8.0.1):
例如=〉如果您的一个或多个子项目确实有一个名为“checkDependencies”的任务,您可以在根项目Gradle中应用该任务:

tasks.register('dependencyCheckRoot') {
dependsOn(provider {
    subprojects.tasks.collect({ task -> task.findByName('checkDependencies') }).findAll {it}
})
  doLast {
     ... your task content ...
  }
}

如果现在调用 dependencyCheckRoot,它将依赖于找到的所有子项目任务。

相关问题