Flink 源碼編譯

打包命令

打包整個項目

mvn clean package -DskipTests -Drat.skip=true

打包單個模塊

mvn clean package -DskipTests -Drat.skip=true -pl flink-dist

如果該模塊依賴其他模塊,可能需要先將其他模塊 install 到本地,如果依賴的模塊的源代碼有修改,則需要重新install,比如 flink-dist 依賴的 flink-clients 模塊源代碼有改動,則需要先:

mvn clean install -DskipTests -Drat.skip=true -pl flink-clients

修改代碼

如果要打的源代碼修改過,那么需要先執行:

mvn spotless:apply
# 或只對單個模塊
mvn spotless:apply -pl flink-clients

否則會報:

The following files had format violations:
……
Run 'mvn spotless:apply' to fix these violations.

flink-runtime-web

Windows

windows 打包會報如下錯誤

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  26:06 min
[INFO] Finished at: 2025-04-24T10:03:43+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.github.eirslett:frontend-maven-plugin:1.11.0:npm (npm install) on project flink-runtime-web: Failed to run task: 'npm ci --cache-max=0 --no-save ${npm.proxy}' failed. org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <args> -rf :flink-runtime-web

該異常沒有解決,需要在Linux上打包。但是如果在Windows上開發,我們可以選擇跳過 flink-runtime-web ,在Windows打包成功后驗證一下我們修改代碼的邏輯沒問題后再將代碼傳到Linux服務器進行完整打包。跳過 flink-runtime-web 的方法只需要修改 pom 即可:


Windows打包截圖:

也就是打包時沒有包含flink-runtime-web,這樣打出來的flink-dist 包運行的flink 應用對應的 web ui 是打不開的。另外對于我們要修改的代碼對應的模塊如果打包時如果不涉及 flink-runtime-web ,這樣我們只需要打包對應的模塊,只上傳該模塊對應的jar包就行,因為不涉及 flink-runtime-web,所以無需在 Linux 打完整的包。

Linux

如果我們修改的代碼打包時涉及 flink-runtime-web 模塊,或者我們想完整的打包,那么就需要在 Linux上打包,打包 flink-runtime-web 需要安裝 node、npm,也就是需要下載node包,但是因為網絡等原因,打包時下載可能會失敗,這樣我們可以提前將對應版本的包下載到本地,然后放到對應的maven 倉庫路徑下即可,以 flink 1.15.3為例:

wget https://nodejs.org/dist/v16.13.2/node-v16.13.2-linux-x64.tar.gz
mkdir /opt/workspace/m2/repository/com/github/eirslett/node/16.13.2
mv node-v16.13.2-linux-x64.tar.gz /opt/workspace/m2/repository/com/github/eirslett/node/16.13.2/node-16.13.2-linux-x64.tar.gz

另外打包時因為涉及連接外網,可能會遇到很多因網絡問題導致的失敗,需要重試很多次,這樣我們如果從頭打包因為很多重復的沒必要的模塊浪費時間,我們可以將之前打包成功的模塊install本地,然后單獨打 flink-runtime-web,打包命令:

mvn clean package -DskipTests -Drat.skip=true -pl flink-runtime-web

這樣比較節省時間,當flink-runtime-web打包成功后,再全部打一遍即可。當然有條件的最好通過配置VPN連接外網,這樣打包會順利很多。

JDK 版本

在Linux打包時遇到了JDK版本的問題,記錄如下

jdk1.8.0_45

[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /root/workspace/flink/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/utils/OperationTreeBuilder.java:[663,57] unreported exception X; must be caught or declared to be thrown
[INFO] 1 error

openjdk-1.8.0.181:

[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /opt/workspace/flink/flink-connectors/flink-connector-jdbc/src/main/java/org/apache/flink/connector/jdbc/internal/converter/OracleRowConverter.java:[164,43] cannot find symbolsymbol:   method getTimeZone()location: variable ts of type oracle.sql.TIMESTAMPTZ
[INFO] 1 error

最后升級到 jdk1.8.0_421 成功,對應的安裝包下載地址:

  • https://www.oracle.com/java/technologies/downloads/?er=221886#java8-linux
  • https://www.oracle.com/java/technologies/downloads/?er=221886#license-lightbox
  • https://download.oracle.com/otn/java/jdk/8u421-b09/d8aa705069af427f9b83e66b34f5e380/jdk-8u421-linux-x64.tar.gz

Jar 包路徑

每個模塊的target目錄下是有對應的jar包的,但是有的模塊對應的jar包名帶有scala版本,比如 flink-dist_2.12-1.15.3.jar,但默認的安裝包是不帶 scala版本的,真正的安裝包對應的目錄為 flink-dist/target/flink-${project.version}-bin/flink-${project.version}
以flink 1.15.3 為例:flink-dist/target/flink-1.15.3-bin/flink-1.15.3,所有相關的jar包,腳本都在這個目錄下。另外在Linux上打包時會創建一個該目錄的軟連接:build-target,所以我們在Linux上只需要在build-target找自己需要的包即可,但對于Windows則沒有對應的build-target文件夾。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/902805.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902805.shtml
英文地址,請注明出處:http://en.pswp.cn/news/902805.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Agent實戰】從0到1開發一個Python 解釋器 MCP SSE Server

寫在前面 想象一個場景:LLM Agent(如 AutoGPT、MetaGPT 或我們自己構建的 Agent)在規劃任務后,決定需要運行一段 Python 代碼來處理數據或調用某個 API。它不能直接在自己的環境中執行(通常不具備這個能力,也不安全),而是需要將這段代碼發送給一個專門的外部服務來執行…

HTML word屬性

介紹 CSS word-spacing 屬性&#xff0c;用于指定段字之間的空間&#xff0c;例如&#xff1a; p {word-spacing:30px; }word-spacing屬性增加或減少字與字之間的空白。 注意&#xff1a; 負值是允許的。 瀏覽器支持 表格中的數字表示支持該屬性的第一個瀏覽器版本號。 屬…

assertEquals()

assertEquals() 是 JUnit 框架中用于進行斷言操作的一個非常常用的方法&#xff0c;其主要目的是驗證兩個值是否相等。如果兩個值不相等&#xff0c;測試就會失敗&#xff0c;JUnit 會給出相應的錯誤信息&#xff0c;提示開發者測試未通過。下面為你詳細介紹&#xff1a; 方法…

Nginx 反向代理,啥是“反向代理“啊,為啥叫“反向“代理?而不叫“正向”代理?它能干哈?

Nginx 反向代理的理解與配置 User 我打包了我的前端vue項目&#xff0c;上傳到服務器&#xff0c;在寶塔面板安裝了nginx服務&#xff0c;配置了文件 nginx.txt .運行了項目。 我想清楚&#xff0c;什么是nginx反向代理&#xff1f;是nginx作為一個中介&#xff1f;中間件來集…

用 Python 打造打籃球字符動畫!控制臺彩色炫酷輸出,抖音搞怪視頻靈感還原

一、引言&#xff1a;從抖音搞怪視頻到 Python 字符動畫的奇妙之旅 刷抖音時刷到一個神級操作 —— 博主用 01 數字矩陣還原了明星打籃球的經典畫面&#xff0c;字符在控制臺隨動作節奏炫彩跳動&#xff0c;瞬間點燃了技術宅的 DNA&#xff01;作為 Python 圖像處理愛好者&…

《逐夢九天:中國航天編年史》

《逐夢九天:中國航天編年史》 新華社酒泉2025年4月24日電(記者李國利、黃一宸)神舟二十號載人飛船發射4月24日取得圓滿成功,中國載人航天在“東方紅一號”發射55載之際開啟第20次神舟問天之旅。 當日17時17分,搭載神舟二十號載人飛船的長征二號F遙二十運載火箭在酒泉衛星…

IDEA搭建環境的五種方式

一、普通的java項目 File--New--Project 選擇Java&#xff0c;jdk選擇1.8版本&#xff0c;然后點next 輸入項目名和路徑名&#xff0c;點擊Finish 創建包結構&#xff0c;編寫Class類 編寫主方法&#xff0c;輸出Hello標志完成 二、普通的javaWeb項目 Java Enterprise-- 勾選…

【黑馬 微服務面試篇】

分布式事務 cap定理-Availability CAP定理-Partition tolerance BASE理論 BASE理論是對CAP的一種解決思路&#xff0c;包含三個思想&#xff1a; BasicallyAvailable&#xff08;基本可用&#xff09;&#xff1a;分布式系統在出現故障時&#xff0c;允許損失部分可用性&#…

實時數倉體系概覽與架構演進

? 引言&#xff1a;為什么我們離不開“實時” 曾經的你可能會認為“數據分析一天一更&#xff0c;夠用了”。但當你所在的公司遇上這些情況&#xff1a; 用戶在投放廣告后5分鐘內就想知道轉化效果 風控平臺必須秒級判斷是否攔截訂單 新產品上線后一小時就需調整推薦算法策略…

基于Matlab的車牌識別系統

1.程序簡介 本模型基于MATLAB,通過編程創建GUI界面&#xff0c;基于Matlab的數字圖像處理&#xff0c;對靜止的車牌圖像進行分割并識別&#xff0c;通過編寫matlab程序對圖像進行灰度處理、二值化、腐蝕膨脹和邊緣化處理等&#xff0c;并定位車牌的文字&#xff0c;實現字符的…

JAVA---面向對象(下)

重生之我開始補知識第三集 1.標準 JavaBean 要求&#xff1a; 1&#xff09;類名需要見名知意 2&#xff09;成員變量使用private修飾 3&#xff09;至少提供兩個構造方法 a.無參構造方法 b.帶全部參數的構造方法 4&#xff09;成員方法 a.提供每一個成員變量對應的 …

信奧賽CSP-J復賽集訓(DP專題)(24):P1977 出租車拼車

信奧賽CSP-J復賽集訓&#xff08;DP專題&#xff09;&#xff08;24&#xff09;&#xff1a;P1977 出租車拼車 題目背景 話說小 x 有一次去參加比賽&#xff0c;雖然學校離比賽地點不太遠&#xff0c;但小 x 還是想坐出租車去。大學城的出租車總是比較另類&#xff0c;有“拼…

Windows申請蘋果開發者測試證書Uniapp使用

注意事項 蘋果設備,最好是iPhone XS以上,要不然下載不了Apple DeveloperopenSSL 要是V1版本的來生成證書,要不然HBuilder報錯按步驟來,生成證書,生成標識符,添加測試設備,生成描述性文件注冊蘋果開發者賬號 (如果有蘋果賬號直接登錄) 蘋果開發者官網 開通付費 點擊右上…

dockercompose文件倉庫

mysql version: 3 # 使用docker-compose的版本&#xff0c;根據需要可以調整# 創建數據目錄 # mkdir -p /home/docker/mysql/mysql_data # mkdir -p /home/docker/mysql/mysql_logs # 給予適當的權限&#xff08;確保MySQL容器可以讀寫這些目錄&#xff09; # chmod 777 /ho…

【Linux】47.高級IO(1)

文章目錄 1. 高級IO1.1 五種IO模型1.2 高級IO重要概念1.2.1 同步通信 vs 異步通信1.2.2 阻塞 vs 非阻塞 1.3非阻塞IO1.3.1 fcntl1.3.2 實現函數SetNoBlock1.3.3 輪詢方式讀取標準輸入1.3.4 I/O多路轉接之select1.3.4.1 初識select&#xff1a;1.3.4.2 select函數原型1.3.4.3 理…

【Vulkan 入門系列】創建幀緩沖、命令池、命令緩存,和獲取圖片(六)

這一節主要介紹創建幀緩沖&#xff08;Framebuffer&#xff09;&#xff0c;創建命令池&#xff0c;創建命令緩存&#xff0c;和從文件加載 PNG 圖像數據&#xff0c;解碼為 RGBA 格式&#xff0c;并將像素數據暫存到 Vulkan 的 暫存緩沖區中。 一、創建幀緩沖 createFramebu…

ubuntu的普通用戶相關配置

1.切換到普通用戶下&#xff0c;不出現&#xff0c;用戶名主機ip, 環境變量被破壞&#xff0c; 參考&#xff1a;一文教你快速修改ubuntu終端顯示的主機名和用戶名_ubuntu終端名稱-CSDN博客 2.如果登陸進去無法使用ls,cd&#xff0c;vi等命令 2.1 環境變量 如果 PATH 被清空…

騰訊云×數語科技:Datablau DDM (AI智能版)上架云應用!

在數據爆炸式增長的時代&#xff0c;傳統的數據建模方式已難以滿足企業對敏捷性、智能化、自動化的需求。數語科技聯合騰訊云推出的 Datablau DDM 數據建模平臺&#xff08;AI智能版&#xff09;&#xff0c;基于AI語義建模技術&#xff0c;深度融合騰訊混元大模型能力&#xf…

Spark-streaming(一)

Spark-Streaming概述 Spark Streaming 用于流式數據的處理。 和 Spark 基于 RDD 的概念很相似&#xff0c;Spark Streaming 使用離散化流(discretized stream)作為抽象表示&#xff0c;叫作 DStream。 DStream 是隨時間推移而收到的數據的序列。 Spark-Streaming的特點&…

CS144 Lab 6 實戰記錄:構建 IP 路由器

1 實驗背景與目標 在 CS144 的 Lab 6 中&#xff0c;我們需要在之前實現的 NetworkInterface&#xff08;Lab 5&#xff09;基礎上構建一個完整的 IP 路由器。路由器的主要任務是根據路由表將接收到的 IP 數據報轉發到正確的網絡接口&#xff0c;并發送給正確的下一跳&#xf…