Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/flink/
Posted smile-yan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/flink/相关的知识,希望对你有一定的参考价值。
问题描述
Idea 运行 Flink job 的 main 方法的时候,提示错误如下:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/flink/api/common/serialization/DeserializationSchema
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
at java.lang.Class.getMethod0(Class.java:3018)
at java.lang.Class.getMethod(Class.java:1784)
at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:650)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:632)
Caused by: java.lang.ClassNotFoundException: org.apache.flink.api.common.serialization.DeserializationSchema
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
类似地 org/apache/flink/stream … 等等。
问题分析
写代码的时候并没有提示错误,而是在运行的时候提示缺包,需要找到对应的 pom 依赖包,加入 pom 文件中,并且一定要注意 Flink 的版本问题,flink-core, flink-stream, flink-java 等。
另外还有 pom 依赖需要指定 <scope>
如果是 <scope>provided</scope>
极有可能出现上面的问题。
解决方法
1. 确保添加了依赖
检查自己是否添加这个依赖包。以上面的情况为例,org/apache/flink/api/common
,对应的是 flink-core,因此添加依赖如下:
一定要注意
flink 的版本问题,这个是使用前面定义好的 flink.version(1.12.1)
<!-- https://mvnrepository.com/artifact/org.apache.flink/flink-core -->
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-core</artifactId>
<version>$flink.version</version>
<scope>provided</scope>
</dependency>
2. 更改 <scope>
或者配置 idea
Flink 项目不同的地方在于打包以后到 flink 环境下运行是不需要打包那些 flink 自带的依赖的。
- 方法一:把
<scope>
那一行注释掉。或者更改为 compile - 方法二:编辑 idea 的运行配置,添加 provided 配置。
总结
flink 项目尽量应该本地运行测试,不能每次都打包上 flink 然后进行测试,太麻烦而且不能逐步 DEBUG.
Smileyan
2022.09.02 21:02
以上是关于Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/flink/的主要内容,如果未能解决你的问题,请参考以下文章
错误:Exception in thread “main“ java.lang.ClassCastException
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
Exception in thread "main" java.lang.NullPointerException at Class.main
Exception in thread "main" java.lang.ClassCastException
Exception in thread "main" org.springframework.mail.MailSendException; nested exception de
Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/flink/