当前位置:   article > 正文

Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/flink/_exception in thread "main" java.lang.noclassdeffou

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

类似地 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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2. 更改 <scope> 或者配置 idea

Flink 项目不同的地方在于打包以后到 flink 环境下运行是不需要打包那些 flink 自带的依赖的。

  • 方法一:把 <scope> 那一行注释掉。或者更改为 compile
  • 方法二:编辑 idea 的运行配置,添加 provided 配置。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

flink 项目尽量应该本地运行测试,不能每次都打包上 flink 然后进行测试,太麻烦而且不能逐步 DEBUG.

Smileyan
2022.09.02 21:02

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/278735
推荐阅读
相关标签
  

闽ICP备14008679号