赞
踩
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>
极有可能出现上面的问题。
检查自己是否添加这个依赖包。以上面的情况为例,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>
<scope>
或者配置 ideaFlink 项目不同的地方在于打包以后到 flink 环境下运行是不需要打包那些 flink 自带的依赖的。
<scope>
那一行注释掉。或者更改为 compile
flink 项目尽量应该本地运行测试,不能每次都打包上 flink 然后进行测试,太麻烦而且不能逐步 DEBUG.
Smileyan
2022.09.02 21:02
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。