gradle - Gradle dockerCompose插件为所有任务保留最新配置

标签 gradle groovy configuration

在我的 Spring 启动项目中,我需要保留两个dockerCompose插件配置用于测试和本地应用程序。

例如:

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


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

按照此结构,我配置了任务localPostgreSqlTest:
task localPostgreSqlTest {
    dockerCompose {
        useComposeFiles = ['docker-compose/postgresql-test.yml']
        isRequiredBy(project.tasks.localPostgreSqlTest)
        removeContainers = true
        stopContainers = true
    }
    dependsOn(tasks.test)
}

和另外一个localPostgreSql
task localPostgreSql {
    dockerCompose {
        useComposeFiles = ['docker-compose/postgresql-local.yml']
        isRequiredBy(project.tasks.localPostgreSql)
        removeContainers = false
        stopContainers = false
    }
    tasks.bootRun.dependsOn(it)
}

以单独的方式考虑此配置,一切都会按预期进行。

同时将所有配置添加到build.gradle中,行为会发生变化:在我的两个任务中都使用了最后遇到的dockerCompose配置。

我确定问题出在我的gradle配置和常规知识上。

所以问题是

如何修改我的任务声明localPostgreSqlTestlocalPostgreSql,使它们各自具有自己的插件配置?

最佳答案

假设您正在使用
avast/gradle-docker-compose-plugin
插入:
dockerCompose是全局配置,应在以下位置使用
顶层。因此,一旦您在不同的块中设置了相同的内容,
它仍然只写入相同的位置,因此最后一个值获胜。

为了使您的设置生效,您必须使用nested configurations:

例如。在最高层:

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
    }
}

关于gradle - Gradle dockerCompose插件为所有任务保留最新配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61751691/

相关文章:

groovy - 任务方法的gradle参数顺序

maven - build.gradle文件中应该包含什么以支持标准groovy库的导入

java - IntelliJ + 常规 DSL : How to exclude files from being compiled by groovy plugin?

groovy - 如何执行闭包作为 Groovy 映射的值?

python-3.x - Sanic 如何加载测试应用程序的配置?

debugging - Hudson 和配置(调试、发布、并行等)

c# - 在 C# 中使用 lambda 进行流畅的接口(interface)配置

android - android-gradle无法创建 'AppPlugin'类型的插件

android - Gradle:Android Studio BuildType 资源继承

maven - 在带有 java src 和 groovy 测试的项目中将 groovy 代码放在哪里,以便仅在 groovy 测试中使用它们?