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

Spring Boot集成BigQuery遇ManagedChannelImplBuilder依赖缺失问题

问题描述

我正在用Spring Boot应用对接BigQuery与Google Cloud SQL,添加gson依赖后出现运行时错误,报错信息如下:

org.springframework.beans.factory.UnsatisfiedDependencyException:
Error creating bean with name 'annotationDAO': Unsatisfied dependency
expressed through field 'bigQueryRepository'; nested exception is
org.springframework.beans.factory.BeanCreationException: Error
creating bean with name 'bigQueryRepository' defined in URL
[jar:file:/statistics-service.jar!/BOOT-INF/classes!/com/stl/sciocardio/webapp/statistics/repository/BigQueryRepository.class]:
Instantiation of bean failed; nested exception is
org.springframework.beans.BeanInstantiationException: Failed to
instantiate
[com.stl.sciocardio.webapp.statistics.repository.BigQueryRepository]:
Constructor threw exception; nested exception is
java.lang.NoClassDefFoundError:
io/grpc/internal/ManagedChannelImplBuilder$ChannelBuilderDefaultPortProvider

pom.xml部分配置如下:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
            <version>1.5.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-coyote</artifactId>
            <version>7.0.14</version>
        </dependency>

        
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.3.1</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.9.2</version>
        </dependency>

        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>com.vaadin.external.google</groupId>
                    <artifactId>android-json</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-datastore</artifactId>
            <version>1.97.0</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

        <dependency>
            <groupId>com.github.stefanbirkner</groupId>
            <artifactId>system-rules</artifactId>
            <version>1.19.0</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-inline</artifactId>
            <version>4.3.1</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-bigquery</artifactId>
            <version>2.16.1</version>
            <exclusions>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-bigquerystorage</artifactId>
            <version>2.21.0</version>
            <exclusions>
                <exclusion>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>31.1-jre</version>
        </dependency>

        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.10</version>
            <exclusions>
                <exclusion>
                    <groupId>*</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

            <dependency>
                <groupId>io.netty</groupId>
                <artifactId>netty-transport-native-kqueue</artifactId>
                <version>${project.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

我认为这是依赖问题,因为添加gson库后才出现该错误,使用Maven 3,请问有什么解决思路?

解决思路
  • 排查grpc依赖冲突:报错提示的缺失类属于grpc-core包,添加gson后可能间接引入了不兼容的grpc版本,和Google Cloud客户端依赖的版本冲突。执行mvn dependency:tree命令查看grpc相关依赖的版本来源,找到冲突项后,要么通过依赖排除移除冲突版本,要么显式指定兼容的grpc-core版本,比如:
<dependency>
    <groupId>io.grpc</groupId>
    <artifactId>grpc-core</artifactId>
    <version>1.54.0</version> <!-- 选择与Google Cloud客户端匹配的版本 -->
</dependency>
  • 移除gson的全量排除配置:gson本身没有强制的传递依赖,你添加的<exclusion><groupId>*</groupId><artifactId>*</artifactId></exclusion>完全没必要,反而可能打乱依赖传递链,直接删除这个排除块即可。

  • 升级Spring Boot版本:当前使用的Spring Boot 1.5.4.RELEASE是2017年的老旧版本,和你用的Google Cloud客户端、guava 31.1-jre等高版本依赖兼容性极差。建议升级到Spring Boot 2.x的稳定版本(如2.7.x),同时同步调整spring-cloud-dependencies的版本,从根源减少依赖冲突。

  • 验证guava版本兼容性:你手动指定了guava 31.1-jre,但Google Cloud客户端对guava版本有特定要求,这个版本可能和grpc或其他组件不兼容。可以尝试去掉Google Cloud依赖中的guava排除,让依赖自带的guava版本生效,或者确认当前guava版本与所有相关组件的兼容性。

  • 清理Maven缓存并重新构建:执行mvn clean install -U命令,强制更新依赖并清理本地缓存的损坏文件,重新构建项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:25:45