You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gradle测试中Spring Docker Compose Support不生效,如何免打包解决?

Spring Boot 3.1 Docker Compose Support在Gradle测试中的依赖配置问题

Spring Docker Compose Support随Spring Boot 3.1推出,配置后执行./gradlew bootRun时能正常启停Docker服务。按照官方文档,使用developmentOnly依赖声明可避免将其打包到生产构建中:

dependencies {
    developmentOnly("org.springframework.boot:spring-boot-docker-compose")
}

运行@SpringBootTest测试时,因Docker服务未启动导致Bean创建失败——这符合官方文档中「测试时默认禁用该支持」的说明。但设置spring.docker.compose.skip.in-tests=false后,问题依旧,完全看不到Docker Compose Support加载的迹象。将developmentOnly改为implementation后,测试才恢复正常。

这说明developmentOnly依赖无法在测试运行时生效,可能是配置遗漏,或是Spring Gradle文档/实现存在问题。当前需要解决的核心需求是:如何在Gradle中实现测试时启用Docker Compose Support,同时避免该可选依赖被无意打包?

相关未解决问题:

  • Spring Boot 3.1 RC1 Docker Compose无法在集成测试中激活
  • Spring Boot 3.1搭配Compose和Postgres依赖时,contextLoad测试失败

解决方案

方法1:同时声明developmentOnly和testImplementation依赖

将依赖拆分为两项,既保证开发运行时可用,又让测试阶段能加载到该依赖:

dependencies {
    developmentOnly("org.springframework.boot:spring-boot-docker-compose")
    testImplementation("org.springframework.boot:spring-boot-docker-compose")
}

developmentOnly确保依赖不会被打包到生产构建,testImplementation则让测试阶段能正常加载Docker Compose Support,配合spring.docker.compose.skip.in-tests=false即可启动Docker服务。

方法2:用Gradle配置规则统一管理

若不想重复声明依赖,可通过Gradle配置规则让testImplementation继承developmentOnly的依赖:

configurations {
    testImplementation.extendsFrom developmentOnly
}

dependencies {
    developmentOnly("org.springframework.boot:spring-boot-docker-compose")
}

这种方式更简洁,一次声明即可覆盖开发运行和测试场景,同时依然保证依赖不会被打包到生产构件中。

注意事项

  • 确保测试配置中spring.docker.compose.skip.in-tests=false已正确设置(可在src/test/resources/application.properties或application.yml中配置)
  • 检查Gradle版本与Spring Boot 3.1的兼容性,建议使用Gradle 7.5及以上版本

内容的提问来源于stack exchange,提问作者oligofren

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 11:10:10