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

适用于Google Spanner与Dataflow的最优POM配置咨询

Java 17下GCP Spanner + Dataflow极简Maven配置(解决gRPC依赖冲突问题)

以下是基于最新兼容版本的优化POM配置,通过Google Cloud BOM和Apache Beam BOM彻底解决gRPC版本冲突导致的ClassNotFound、超时等问题,同时简化依赖管理:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>spanner-table-copy</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>Spanner Table Copy</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <!-- 使用BOM统一管理版本,无需手动指定单个依赖版本 -->
        <google.cloud.bom.version>26.42.0</google.cloud.bom.version>
        <beam.bom.version>2.54.0</beam.bom.version>
        <lombok.version>1.18.36</lombok.version>
        <junit.jupiter.version>5.11.3</junit.jupiter.version>
        <mockito.version>5.14.2</mockito.version>
        <slf4j.version>2.0.13</slf4j.version>
    </properties>

    <!-- 引入BOM统一管理依赖版本 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>google-cloud-bom</artifactId>
                <version>${google.cloud.bom.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.apache.beam</groupId>
                <artifactId>beam-sdks-java-bom</artifactId>
                <version>${beam.bom.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Google Cloud Spanner -->
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-spanner</artifactId>
            <!-- 版本由BOM自动管理 -->
        </dependency>

        <!-- Apache Beam核心与GCP集成 -->
        <dependency>
            <groupId>org.apache.beam</groupId>
            <artifactId>beam-sdks-java-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.beam</groupId>
            <artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.beam</groupId>
            <artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.beam</groupId>
            <artifactId>beam-runners-direct-java</artifactId>
        </dependency>

        <!-- 日志依赖 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>${slf4j.version}</version>
        </dependency>

        <!-- 测试依赖 -->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.jupiter.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-junit-jupiter</artifactId>
            <version>${mockito.version}</version>
            <scope>test</scope>
        </dependency>
        <!-- mockito-core和inline已包含在mockito-junit-jupiter中,无需重复引入 -->
    </dependencies>

    <build>
        <plugins>
            <!-- 适配Java17的编译器插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.12.1</version>
                <configuration>
                    <source>${maven.compiler.source}</source>
                    <target>${maven.compiler.target}</target>
                    <!-- 如果不需要Java预览特性,可移除下面这行 -->
                    <compilerArgs>
                        <arg>--enable-preview</arg>
                    </compilerArgs>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.3.2</version>
                <configuration>
                    <!-- 移除不必要的参数,Mockito 5.x+对Java17已原生支持 -->
                </configuration>
            </plugin>

            <!-- 升级Shade插件适配Java17打包 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.5.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <createDependencyReducedPom>false</createDependencyReducedPom>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.example.SpannerTableCopyApp</mainClass>
                                </transformer>
                                <!-- 添加ServicesTransformer避免SPI服务类丢失 -->
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

核心优化说明

  • 引入Google Cloud BOM:自动管理所有GCP相关依赖(包括gRPC)的兼容版本,彻底解决手动指定版本导致的冲突,比如不同依赖拉取不一致的gRPC版本引发ClassNotFound或超时问题。
  • 引入Apache Beam BOM:统一Beam所有组件的版本,确保Beam与GCP服务的兼容性。
  • 简化依赖配置:移除所有BOM已覆盖的依赖版本号,POM更简洁且版本一致性有保障。
  • 适配Java17:升级编译器和Shade插件版本,移除不必要的兼容参数,确保在Java17环境下编译、打包正常。
  • 精简测试依赖:Mockito的mockito-junit-jupiter已包含mockito-core和mockito-inline,无需重复引入,减少冗余。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:35:20