当前位置: 首页 > news >正文

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>l

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

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

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

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

总结

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

Smileyan
2022.09.02 21:02

相关文章:

  • springboot项目整理(持续更新)
  • Linux Shell重定向 管道命令 awk编程 sed文件操作高阶函数
  • jQuery表单选择器:快速选择input标签
  • 6、Java——三种方式循环出水仙花数
  • 前端核心二:VUE
  • Javassist基本用法
  • 电子学会2022年6月青少年软件编程(图形化)等级考试试卷(一级)
  • 【Vue 基础知识】keep-alive是什么?怎么用?
  • 数据结构(四) -- 递归
  • C++的STL--->map和set容器的使用
  • 【Docker系列】Docker生产常用命令01
  • 【编程题】【Scratch四级】2021.06 从小到大排序
  • Framwork入门のPiex 6P源码(下载/编译/刷机)
  • 极简idea下git操作(二)
  • (Matlab)使用竞争神经网络实现数据聚类
  • php的引用
  • ComponentOne 2017 V2版本正式发布
  • co模块的前端实现
  • js继承的实现方法
  • js如何打印object对象
  • js中forEach回调同异步问题
  • 关于extract.autodesk.io的一些说明
  • 一文看透浏览器架构
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 积累各种好的链接
  • (02)Hive SQL编译成MapReduce任务的过程
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (HAL库版)freeRTOS移植STMF103
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)WCF的Binding模型
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .Net Winform开发笔记(一)
  • .NET连接MongoDB数据库实例教程
  • .NET微信公众号开发-2.0创建自定义菜单
  • @SpringBootApplication 包含的三个注解及其含义
  • [ MSF使用实例 ] 利用永恒之蓝(MS17-010)漏洞导致windows靶机蓝屏并获取靶机权限
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [145] 二叉树的后序遍历 js
  • [20150629]简单的加密连接.txt
  • [BZOJ5125]小Q的书架(决策单调性+分治DP+树状数组)
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [CISCN 2019华东南]Web11
  • [CodeForces-759D]Bacterial Melee
  • [datastore@cyberfear.com].Elbie、[thekeyishere@cock.li].Elbie勒索病毒数据怎么处理|数据解密恢复
  • [ERROR] 不再支持目标选项 5。请使用 7 或更高版本
  • [ffmpeg] 定制滤波器
  • [GXYCTF2019]BabyUpload1 -- 题目分析与详解
  • [JS真好玩] 掘金创作者必备: 监控每天是谁取关了你?
  • [LeetCode]Spiral Matrix
  • [Linux] 一文理解HTTPS协议:什么是HTTPS协议、HTTPS协议如何加密数据、什么是CA证书(数字证书)...
  • [pasecactf_2019]flask_ssti proc ssti config
  • [PHP源码阅读]empty和isset函数