Gradle项目Spring Cloud Contract stubs无法发布到本地Maven仓库
问题原因
stubs包无法发布到本地Maven仓库的核心原因有两个:
- 引入了Maven场景专用的冗余依赖,且自定义
maven-publish发布规则时,没有把Spring Cloud Contract生成的stubs产物纳入发布范围 - 自动发布stubs的默认逻辑是基于旧版Gradle
maven插件实现的,使用新版maven-publish插件时,插件不会自动修改自定义的发布配置,必须手动声明stubs包的发布规则
修复步骤
1. 清理冗余错误依赖
打开build.gradle,删除Gradle项目不需要的Maven专用插件依赖:
// 直接删除这一行冗余配置 implementation 'org.springframework.cloud:spring-cloud-contract-maven-plugin:3.1.3'
可选优化:当前配置重复引入了2.8.5、2.8.7两个版本的spring-kafka和对应测试包,建议删除低版本依赖,避免出现依赖冲突。
2. 将stubs产物加入发布配置
在publishing块的mavenJava发布项中,添加stubs包的发布声明,修改后的配置如下:
publishing { publications { mavenJava(MavenPublication) { from components.java artifact sourceJar { classifier "sources" } // 新增stubs包发布配置 artifact verifierStubsJar { classifier "stubs" } } } }
verifierStubsJar是Spring Cloud Contract Gradle插件自动注册的任务,负责生成带stubs分类器的存根jar包,将其声明为发布产物后,执行发布任务时就会自动把该包上传到目标仓库。
3. 验证发布结果
依次执行以下命令清理缓存、重新构建发布:
./gradlew clean ./gradlew build publishToMavenLocal
执行完成后检查本地Maven仓库对应目录,即可看到pcshop-1.0-SNAPSHOT-stubs.jar包。
如果发布前想确认stubs包是否正常生成,可以单独执行./gradlew verifierStubsJar,然后在项目build/libs目录下检查是否存在对应stubs jar包。
内容的提问来源于stack exchange,提问作者Hleb Shypula
相关产品推荐
相关产品推荐

