Spring Boot集成Google Speech-to-Text API依赖运行错误及冲突问题
解决Spring Boot集成Google Speech-to-Text时的gRPC依赖冲突问题
我来帮你梳理问题根源和解决方案:
问题分析
- 第一个异常
io.grpc.ManagedChannelProvider$ProviderNotFoundException:Google Cloud Speech客户端库基于gRPC构建,但默认未包含具体的gRPC通道实现(如OkHttp或Netty),调用SpeechClient.create()时找不到可用的通道提供者,因此抛出该错误。 - 后续的版本冲突:你手动添加了
grpc-okhttp和grpc-netty的1.11.0版本,但google-cloud-speech:0.47.0-alpha内部依赖的是grpc-core 1.10.1,两个版本的grpc-core不兼容,导致Maven无法解析依赖。
解决方案
方法1:使用Google Cloud BOM统一依赖版本(推荐)
Google提供了BOM(物料清单)来管理所有Cloud客户端库的版本,自动确保依赖版本一致。在你的pom.xml中添加以下依赖管理配置:
<dependencyManagement> <dependencies> <dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-bom</artifactId> <version>0.47.0-alpha</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
然后修改依赖列表,去掉手动指定的版本号(包括Google Speech和gRPC相关依赖):
<!-- Google Speech-to-Text 客户端 --> <dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-speech</artifactId> </dependency> <!-- 添加一个gRPC通道实现(二选一即可,无需同时添加) --> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-okhttp</artifactId> </dependency> <!-- 或者选择Netty实现: <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-netty</artifactId> </dependency> -->
这样Maven会自动从BOM中继承所有兼容的版本,彻底避免版本冲突问题。
方法2:手动匹配gRPC版本
如果不想使用BOM,也可以手动将grpc-okhttp和grpc-netty的版本修改为google-cloud-speech依赖的grpc版本(即1.10.1):
<dependency> <groupId>io.grpc</groupId> <artifactId>grpc-okhttp</artifactId> <version>1.10.1</version> </dependency> <dependency> <groupId>io.grpc</groupId> <artifactId>grpc-netty</artifactId> <version>1.10.1</version> </dependency>
不过这种方式需要你自行维护版本一致性,后续升级Google Cloud库时也要同步调整gRPC版本,不如BOM方式便捷。
额外提示
- 无需同时添加
grpc-okhttp和grpc-netty,二者都是gRPC的传输层实现,功能上无本质区别,选其一即可。 - 若你的Spring Boot项目有自身的依赖管理,可通过
mvn dependency:tree命令查看依赖树,确认版本是否被正确继承,避免被Spring Boot的依赖版本覆盖。
内容的提问来源于stack exchange,提问作者Dhanushka Sampath
相关产品推荐
相关产品推荐

