1. 程式人生 > 實用技巧 >flink error: Exception in thread "main" java.lang.NoClassDefFoundError

flink error: Exception in thread "main" java.lang.NoClassDefFoundError

idea 執行時報錯:
Exception in thread "main" java.lang.NoClassDefFoundError

Caused by: java.lang.ClassNotFoundException: org.apache.flink.api.java.ExecutionEnvironment

但是開發時idea 中,ExecutionEnvironment 是存在的,原始碼可以跳轉和檢視.

原因(借用:https://www.cnblogs.com/xyhz0310/p/6803950.html):

NoClassDefFoundError錯誤的發生,是因為Java虛擬機器在編譯時能找到合適的類,而在執行時不能找到合適的類導致的錯誤。例如在執行時我們想呼叫某個類的方法或者訪問這個類的靜態成員的時候,發現這個類不可用,此時Java虛擬機器就會丟擲NoClassDefFoundError錯誤。與ClassNotFoundException的不同在於,這個錯誤發生只在執行時需要載入對應的類不成功,而不是編譯時發生。

簡單總結就是,NoClassDefFoundError發生在編譯時對應的類可用,而執行時在Java的classpath路徑中,對應的類不可用導致的錯誤。

可以看到是在執行時,無法獲取到org.apache.flink.api.java.ExecutionEnvironment 類,也就是說classpath 沒有包含對應的 jar 包

解決方法:

1. 點選設定工程

2. 新增在SDKs 中新增 flink 安裝目錄下的 lib 下所有jar 包

加入後重新執行就可以了