在我的 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配置和常规知识上。
所以问题是
如何修改我的任务声明
localPostgreSqlTest
和localPostgreSql
,使它们各自具有自己的插件配置?
最佳答案
假设您正在使用
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/