文章目录
  • 1. 引言
  • 2. 解决方案
  • 2.1 方案一:maven-dependency-plugin插件下载依赖
  • 2.1 方案二:maven-shade-plugin插件打包完整jar
  • 3. 文末


1. 引言

问题:非完整包导致缺少依赖

在Flink作业的开发场景中,我们可能会经常使用到很多的一些cdc connector,例如典型的mysql-cdc。一般我们都可以从maven仓库去下载,例如: https://mvnrepository.com/artifact/com.ververica/flink-connector-mysql-cdc/2.0.2

解决高版本flink cdc connector缺少依赖的问题_NoClassDefine

从上面的图片,可以看到cdcjar包是完整的,所以我们的flink作业直接引入,一般不会报NoClassDefException,但是,高版本的cdc jar似乎就没有完整包了

解决高版本flink cdc connector缺少依赖的问题_大数据_02

那么如何获取cdc jar的所有依赖呢?下面继续讲解。

2. 解决方案

2.1 方案一:maven-dependency-plugin插件下载依赖

先创建一个空的maven项目,没有任何内容,只有一个pom文件,文件内容如下(注意:只有一个依赖):

<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>org.apache.flink</groupId>
  <artifactId>flink-connector-mysql-cdc</artifactId>
  <version>3.1.1-with-dependencies</version>

  <dependencies>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-connector-mysql-cdc</artifactId>
      <version>3.1.1</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.1.2</version>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>copy-dependencies</goal>
            </goals>
            <configuration>
              <outputDirectory>${project.build.directory}/lib</outputDirectory>
              <includeScope>runtime</includeScope>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.

解决高版本flink cdc connector缺少依赖的问题_cdc_03


然后执行如下命令下载:

mvn clean package
  • 1.

构建成功,可以在项目的目录有一个target,里面有一个lib目录,这些就是cdc jar所有的依赖了:

解决高版本flink cdc connector缺少依赖的问题_大数据_04

2.1 方案二:maven-shade-plugin插件打包完整jar

pom的内容如下:

<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>org.apache.flink</groupId>
  <artifactId>flink-connector-mysql-cdc</artifactId>
  <version>3.1.1-with-dependencies</version>

  <dependencies>
    <dependency>
      <groupId>org.apache.flink</groupId>
      <artifactId>flink-connector-mysql-cdc</artifactId>
      <version>3.1.1</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2.4</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <outputFile>${project.build.directory}/${project.artifactId}-with-dependencies.jar</outputFile>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.

同样执行如下命令:

mvn clean package
  • 1.

解决高版本flink cdc connector缺少依赖的问题_NoClassDefine_05


在本地,也能看到它的体积是比较大的:

解决高版本flink cdc connector缺少依赖的问题_缺少依赖_06

3. 文末

本文主要讲解高版本flink cdc连接其缺少依赖的问题,主要使用“dependency”以及“shade”插件来打包,希望能帮助到大家,谢谢大家的阅读,本文完!