小能豆

FlinkCDC2.4和Flink1.13版的guava冲突问题怎么解决

javascript

FlinkCDC2.4和Flink1.13版的guava冲突问题怎么解决


阅读 42

收藏
2024-06-19

共1个答案

小能豆

在使用FlinkCDC2.4和Flink1.13时,可能会遇到Guava版本冲突问题。这是因为Flink和FlinkCDC可能依赖于不同版本的Guava库。解决这种依赖冲突的常见方法是通过使用 MavendependencyManagementdependencyExclusions 来强制使用特定版本的Guava库。

解决方法

1. 排除冲突的依赖

你可以在你的项目的 pom.xml 文件中排除不需要的Guava依赖,只保留一个版本。以下是一个示例:

<dependencies>
    <!-- Flink dependencies -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java_2.11</artifactId>
        <version>1.13.0</version>
        <exclusions>
            <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients_2.11</artifactId>
        <version>1.13.0</version>
        <exclusions>
            <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- FlinkCDC dependencies -->
    <dependency>
        <groupId>com.ververica</groupId>
        <artifactId>flink-cdc-connectors</artifactId>
        <version>2.4.0</version>
        <exclusions>
            <exclusion>
                <groupId>com.google.guava</groupId>
                <artifactId>guava</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- 添加Guava的单独依赖,确保所有组件使用相同版本 -->
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>30.1-jre</version>
    </dependency>
</dependencies>

2. 使用 dependencyManagement

通过 dependencyManagement 元素,确保所有模块都使用相同版本的Guava:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>30.1-jre</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- Flink dependencies -->
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-streaming-java_2.11</artifactId>
        <version>1.13.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.flink</groupId>
        <artifactId>flink-clients_2.11</artifactId>
        <version>1.13.0</version>
    </dependency>

    <!-- FlinkCDC dependencies -->
    <dependency>
        <groupId>com.ververica</groupId>
        <artifactId>flink-cdc-connectors</artifactId>
        <version>2.4.0</version>
    </dependency>
</dependencies>

在这个配置中,dependencyManagement 元素确保整个项目(包括所有子模块)使用指定版本的Guava。

结论

通过排除冲突的依赖并指定一个统一的Guava版本,你可以解决FlinkCDC2.4和Flink1.13之间的Guava版本冲突问题。上面的示例展示了如何在 pom.xml 文件中配置这些依赖,以确保兼容性和避免冲突。

2024-06-19