仅对allprojects部分中的rootProject进行Gradle任务依赖

时间:2017-06-07 15:05:20

标签: gradle build.gradle gradle-dependencies

我有一个gradle任务为我的所有项目构建docker镜像。除private async void button1_Click(object sender, EventArgs e) { bool onLine = false; Stopwatch chrono = new Stopwatch(); await (Task.Run(new Action(() => { chrono.Start(); while (chrono.ElapsedMilliseconds < 2000) { if (!State().Equals(Online)) { System.Threading.Thread.Sleep(250); } else { onLine = true; break; } } }))); if (onLine) { operationCompleted(); } else { MessageBox.Show("Error"); } } 之外,它们运行正常,rootProject具有在DockerimageBuild itself. This dependency should only apply for the rootProject`之前执行的依赖任务,而不是子项目。 我广泛搜索并阅读文档,但没有找到添加依赖项的完美解决方案,可能我错过了一个明显的观点。

这是我的任务(删除了一些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,但我无法找到正确的符号。

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

1 个答案:

答案 0 :(得分:0)

解决方案就像将当前项目的名称与根项目的名称进行比较一样简单,只需将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}"
}