Gradle dockerCompose插件为所有任务保留最后一个配置

Gradle dockerCompose插件为所有任务保留最后一个配置,gradle,groovy,configuration,Gradle,Groovy,Configuration,在我的SpringBoot项目中,我需要为测试和本地应用程序保留两个dockerCompose插件配置 例如: dockerCompose { useComposeFiles = ['docker-compose/postgresql-test.yml'] isRequiredBy(project.tasks.localPostgreSqlTest) removeContainers = true stopContainers = true } 及 按照此结构,

在我的SpringBoot项目中,我需要为测试和本地应用程序保留两个dockerCompose插件配置

例如:

dockerCompose {
    useComposeFiles = ['docker-compose/postgresql-test.yml']
    isRequiredBy(project.tasks.localPostgreSqlTest)
    removeContainers = true
    stopContainers = true
}

按照此结构,我配置了任务localPostgreSqlTest:

另一个是localPostgreSql

以不同的方式考虑这种配置,一切都按预期进行

同时将所有配置添加到build.gradle行为更改:我的两个任务中都使用了lastly met dockerCompose配置

我确信问题在于我的gradle配置和groovy知识

所以问题是 如何修改我的任务声明localPostgreSqlTest和localPostgreSql,使它们各自具有自己的插件配置?

假设您正在使用 插件:

dockerCompose是一种全局配置,应该在 顶级的。所以,一旦你在不同的块中设置相同的东西, 它仍然只写入同一个位置,因此最后一个值获胜

要使设置正常工作,您必须使用:

例如,在顶层:

dockerCompose {
    dev {
        useComposeFiles = ['docker-compose/postgresql-local.yml']
        isRequiredBy(project.tasks.localPostgreSql)
        removeContainers = false
        stopContainers = false
    }
    test {
        useComposeFiles = ['docker-compose/postgresql-test.yml']
        isRequiredBy(project.tasks.localPostgreSqlTest)
        removeContainers = true
        stopContainers = true
    }
}

如果我使用的是dependsOntasks.test在doFirst或doLast内部测试,我就无法在composeUp之后和composeDown之前启动测试。在你发表文章之前,我尝试过类似的技巧,我想我错过了一些东西,只是重复了其他尝试。常规composeUp不再配置,因此应该会很快失败-现在有一些以dev为前缀的任务,例如devComposeUp等,但没有分享你的实际问题,这里并没有太多建议。我写了关于通话顺序的文章。重点是在测试之后编写CTart,但我需要先编写。您的提案的顺序是:1。测试,2个组件,3个第一块,4个第一块。我使用额外的任务检测到了它,因为在第一步测试中我失败了,因为测试需要启动docker。镇静。请让我知道,如果你需要从我这边不同的细节。请随时添加另一个问题,在那里你显示的问题。我想这是如何回答你最初的问题,以及你是如何遇到一些不同的问题的。
task localPostgreSqlTest {
    dockerCompose {
        useComposeFiles = ['docker-compose/postgresql-test.yml']
        isRequiredBy(project.tasks.localPostgreSqlTest)
        removeContainers = true
        stopContainers = true
    }
    dependsOn(tasks.test)
}
task localPostgreSql {
    dockerCompose {
        useComposeFiles = ['docker-compose/postgresql-local.yml']
        isRequiredBy(project.tasks.localPostgreSql)
        removeContainers = false
        stopContainers = false
    }
    tasks.bootRun.dependsOn(it)
}
dockerCompose {
    dev {
        useComposeFiles = ['docker-compose/postgresql-local.yml']
        isRequiredBy(project.tasks.localPostgreSql)
        removeContainers = false
        stopContainers = false
    }
    test {
        useComposeFiles = ['docker-compose/postgresql-test.yml']
        isRequiredBy(project.tasks.localPostgreSqlTest)
        removeContainers = true
        stopContainers = true
    }
}