Gradle allprojects 部分的 rootProject 的任务依赖

Gradle task dependency only for rootProject in allprojects section

我有一项 gradle 任务要为我的所有项目构建 docker 图像。这些 运行 很好,除了 rootProject 有一个依赖任务要在 DockerimageBuild itself. This dependency should only apply for therootProject` 而不是子项目之前执行。 我广泛地搜索并阅读了文档,但没有找到添加依赖项的完美解决方案,可能我遗漏了一个明显的观点。

这是我的任务(删除了一些 gradle 文件)。

allprojects {
apply plugin: com.bmuschko.gradle.docker.DockerRemoteApiPlugin
    repositories { jcenter() }

docker {
    registryCredentials {
            username = dockerRegistryUsername
            password = dockerRegistryPassword
    }
}

// task build_DockerImage(type: DockerBuildImage, dependsOn: [copy_ImageSource, prepare_ImageConfig]) {
task build_DockerImage(type: DockerBuildImage) {
    group 'Docker'
    description "Builds the docker image: ${dockerTag} locally"
    println "Project: ${rootProject.projectDir}/ci/images/${project.name}"
    inputDir = file("${rootProject.projectDir}/ci/images/${project.name}")
    tag = "azeti/${project.name}:${dockerTag}"
}

它应该有 dependsOn: copy_ImageSource 但我想不出正确的符号。

感谢您的帮助。 问候, 塞巴斯蒂安

解决方案很简单,只需将当前项目的名称与根项目的名称进行比较,然后只应用 dependsOn 进行匹配。

为了简单起见,我已经删除了其余代码,请检查 if 条件。

task build_DockerImage(type: DockerBuildImage) {
    group 'Docker'
    description "Builds the docker image: ${dockerTag} locally"
    if(project.name.equals(rootProject.name) ) {
        dependsOn copy_ImageSource
    }
    inputDir = file("${rootProject.projectDir}/ci/images/${project.name}")
    tag = "azeti/${project.name}:${dockerTag}"
}