Spring Cloud Contract Stub Runner远程拉取合约配置报错排查
Spring Cloud Contract远程Git仓库拉取契约失败:Failed to delete base directory
问题场景
本地拉取生产者契约时配置可正常运行:
@AutoConfigureStubRunner(ids = "com.per.adoption:support.users:+:8081", stubsMode = StubRunnerProperties.StubsMode.LOCAL)
切换到远程Git仓库拉取时抛出错误:Error creating bean with name 'batchStubRunner'... Failed to delete base directory,远程配置如下:
@AutoConfigureStubRunner(ids = "com.per.adoption:support.users:+:8081", repositoryRoot = "git://https://github.com/davidcediel12/pet-adoption-contracts", stubsMode = StubRunnerProperties.StubsMode.REMOTE)
解决方案
1. 修正Git仓库地址格式
repositoryRoot配置中的git://https://是错误的协议前缀,HTTPS类型的Git仓库直接使用https://开头的地址即可:
@AutoConfigureStubRunner(ids = "com.per.adoption:support.users:+:8081", repositoryRoot = "https://github.com/davidcediel12/pet-adoption-contracts", stubsMode = StubRunnerProperties.StubsMode.REMOTE)
2. 修复本地临时目录权限问题
“Failed to delete base directory”错误大多是Spring Cloud Contract的stubs临时目录(默认路径为~/.m2/repository/stubs或系统临时目录)存在权限问题:
- 手动删除临时目录下
com/per/adoption/support/users相关的缓存文件夹 - 确保测试进程拥有该目录的读写、删除权限
3. 验证远程仓库契约结构
确认远程Git仓库中的契约符合Spring Cloud Contract规范:
- 契约文件需放置在
src/test/resources/contracts目录(或对应构建工具配置的契约路径) - 仓库中需包含可被识别的
stubs构建产物,确保Spring Cloud Contract能正确拉取并生成stubs
4. 检查Gradle依赖配置
确保build.gradle中引入了正确的Spring Cloud Contract相关依赖,示例配置:
plugins { id 'org.springframework.boot' version '2.7.x' id 'io.spring.dependency-management' version '1.0.15.RELEASE' id 'org.springframework.cloud.contract' version '3.1.x' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:2021.0.5" } } dependencies { testImplementation 'org.springframework.cloud:spring-cloud-starter-contract-stub-runner' testImplementation 'org.springframework.boot:spring-boot-starter-test' }
5. 强制清理缓存并重新运行
执行Gradle的cleanTest任务清理测试缓存,或手动删除~/.m2/repository/stubs目录,再重新运行测试。
内容的提问来源于stack exchange,提问作者DavidCediel12
相关产品推荐
相关产品推荐

