• 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 依赖需要指定 如果是 provided 极有可能出现上面的问题。

    解决方法

    1. 确保添加了依赖

    检查自己是否添加这个依赖包。以上面的情况为例,org/apache/flink/api/common ,对应的是 flink-core,因此添加依赖如下:

    一定要注意 flink 的版本问题,这个是使用前面定义好的 flink.version(1.12.1)

    
    <dependency>
       <groupId>org.apache.flinkgroupId>
       <artifactId>flink-coreartifactId>
       <version>${flink.version}version>
       <scope>providedscope>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2. 更改 或者配置 idea

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

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

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

    总结

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

    Smileyan
    2022.09.02 21:02

  • 相关阅读:
    1026 程序运行时间(JAVA)
    uniapp 轮播图 预览图片转圈问题
    React 底层 Fiber 架构 简单理解
    CSS常用技巧
    DAZ To UMA⭐五.模型在Blender中的配置教程
    大数据 Hive 数据仓库介绍
    如何将 Helm Chart 推送至 Harbor ?
    WEB3 在 React搭建的Dapp中通过redux全局获取并存储用户ETH与自定义token与交易所存储数量
    MySQL进阶09_锁
    利用pymupdf编辑修改pdf
  • 原文地址:https://blog.csdn.net/smileyan9/article/details/126661885