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/