Flink 源码编译

打包命令

打包整个项目

bash 复制代码
mvn clean package -DskipTests -Drat.skip=true

打包单个模块

bash 复制代码
mvn clean package -DskipTests -Drat.skip=true -pl flink-dist

如果该模块依赖其他模块,可能需要先将其他模块 install 到本地,如果依赖的模块的源代码有修改,则需要重新install,比如 flink-dist 依赖的 flink-clients 模块源代码有改动,则需要先:

bash 复制代码
mvn clean install -DskipTests -Drat.skip=true -pl flink-clients

修改代码

如果要打的源代码修改过,那么需要先执行:

bash 复制代码
mvn spotless:apply
# 或只对单个模块
mvn spotless:apply -pl flink-clients

否则会报:

bash 复制代码
The following files had format violations:
......
Run 'mvn spotless:apply' to fix these violations.

Windows

windows 打包会报如下错误

java 复制代码
[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为例:

bash 复制代码
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,打包命令:

bash 复制代码
mvn clean package -DskipTests -Drat.skip=true -pl flink-runtime-web

这样比较节省时间,当flink-runtime-web打包成功后,再全部打一遍即可。当然有条件的最好通过配置VPN连接外网,这样打包会顺利很多。

JDK 版本

在Linux打包时遇到了JDK版本的问题,记录如下

jdk1.8.0_45

java 复制代码
[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:

java 复制代码
[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 symbol
  symbol:   method getTimeZone()
  location: variable ts of type oracle.sql.TIMESTAMPTZ
[INFO] 1 error

最后升级到 jdk1.8.0_421 成功,对应的安装包下载地址:

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文件夹。

相关推荐
AutoMQ1 小时前
技术干货|为什么越来越多企业放弃 Flink/Spark,用 AutoMQ 替代传统 ETL?
大数据
zxsz_com_cn2 小时前
智能化设备健康管理:中讯烛龙预测性维护系统引领行业变革
大数据·架构
Pigwantofly3 小时前
SpringAI入门及浅实践,实战 Spring‎ AI 调用大模型、提示词工程、对话记忆、Adv‎isor 的使用
java·大数据·人工智能·spring
拓端研究室3 小时前
专题:2025电商增长新势力洞察报告:区域裂变、平台垄断与银发平权|附260+报告PDF、原数据表汇总下载
大数据·人工智能
阿里云大数据AI技术4 小时前
[VLDB 2025]面向Flink集群巡检的交叉对比学习异常检测
大数据·人工智能·flink
青云交5 小时前
电科金仓 KingbaseES 深度解码:技术突破・行业实践・沙龙邀约 -- 融合数据库的变革之力
大数据·数据安全·数字化转型·kingbasees·企业级应用·融合数据库·多模存储
shinelord明5 小时前
【计算机网络架构】网状型架构简介
大数据·分布式·计算机网络·架构·计算机科学与技术
lucky_syq6 小时前
Flink窗口:解锁流计算的秘密武器
大数据·flink
明天好,会的6 小时前
从Spark/Flink到WASM:流式处理框架的演进与未来展望
flink·spark·wasm
gorgor在码农8 小时前
Elasticsearch 的聚合(Aggregations)操作详解
大数据·elasticsearch·搜索引擎