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

升级Google Cloud PubSub后,maven-assembly-plugin打包Jar遇pick_first策略缺失错误

问题原因分析

这个问题的核心是maven-assembly-plugin打包时合并META-INF/services文件的方式导致gRPC负载均衡策略提供者丢失,具体细节如下:

  1. gRPC的服务注册机制
    Google Cloud PubSub升级到1.123.13版本后,依赖的gRPC版本也同步更新。gRPC的负载均衡策略(如pick_first)是通过META-INF/services/io.grpc.LoadBalancerProvider文件进行注册的,每个提供负载均衡策略的依赖(比如grpc-core、grpc-alts等)都会包含这个文件,里面记录了对应的策略实现类。

  2. maven-assembly-plugin的打包缺陷
    maven-assembly-plugin构建fat jar时,默认会对所有依赖中的同名文件进行覆盖式合并,而非内容追加合并。这就导致最终生成的jar包中,META-INF/services/io.grpc.LoadBalancerProvider文件只会保留最后一个被处理的依赖中的内容,其他依赖里注册的pick_first策略对应的Provider类被丢失,运行时自然找不到该策略。

  3. exec-maven-plugin正常运行的原因
    exec-maven-plugin是直接使用项目编译后的类文件和所有依赖jar的原始类路径,不会合并META-INF/services下的文件,每个依赖的服务注册文件都能被gRPC的服务加载器正常读取,因此可以找到pick_first策略。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 19:52:01