根据类查找缺少的jar包,在已有jar包内查找类
背景
提交Flink作业的时候报错:
NoClassDefFoundError:org.apache.kafka.connect.source.SourceRecord
java.lang.NoClassDefFoundError: org/apache/kafka/connect/source/SourceRecord
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.getDeclaredMethod(Class.java:2128)
at com.slankka.rtc.flinkplatform.sql.SqlJob.executeStatement(SqlJob.java:220)
at com.slankka.rtc.flinkplatform.sql.SqlJob.start(SqlJob.java:138)
at com.slankka.rtc.flinkplatform.sql.SqlJobDriver.main(SqlJobDriver.java:14)
Caused by: java.lang.ClassNotFoundException: org.apache.kafka.connect.source.SourceRecord
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at org.apache.flink.util.FlinkUserCodeClassLoader.loadClassWithoutExceptionHandling(FlinkUserCodeClassLoader.java:64)
at org.apache.flink.util.ChildFirstClassLoader.loadClassWithoutExceptionHandling(ChildFirstClassLoader.java:74)
at org.apache.flink.util.FlinkUserCodeClassLoader.loadClass(FlinkUserCodeClassLoader.java:48)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 60 more
找出这个类在哪个jar包,哪个artifact
根据类查找jar包
方法
访问search.maven.org
看包名应该是 kafka的包,那么Kafka的包 groupId:org.apache.kafka
输入 c:SourceRecord g:org.apache.kafka
即可定位
这个包是connect-api。
于是下载 connect-api 即可解决。
在jar包内查找类
分析某一个class在哪个jar包内
for i in `ls`;do echo $i && jar -tf $i | grep SourceRecord.class; done
通过执行此命令,可以找到对应的jar包。
Flink CDC2.2兼容性问题探究
经过查找发现这里有一个Shade的类
flink-sql-connector-mysql-cdc-2.1.1.jar
com/ververica/cdc/connectors/shaded/org/apache/kafka/connect/source/SourceRecord.class
于是猜测是这个flink-sql-connector-mysql-cdc 使用了Kafka的connect-api。
继续分析发现这个库的引用来自:
io.debezium:debezium-embedded:1.5.4.FINAL
点击查看代码
<artifactId>debezium-embedded</artifactId>
<name>Debezium Embedded</name>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>io.debezium</groupId>
<artifactId>debezium-core</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>connect-api</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>connect-runtime</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>connect-json</artifactId>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>connect-file</artifactId>
</dependency>
...
分类:
Java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2021-11-30 困扰多年的Quartz重复调度的问题,终于找到原因