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

相关推荐
互联网推荐官5 分钟前
上海小程序开发的接口安全与数据通信设计:工程实践中的关键决策
大数据·人工智能·物联网·软件工程
pingao14137810 小时前
智联未来:4G温湿度传感器如何重塑数据监测新生.态
大数据·网络·人工智能
数新网络12 小时前
告别“数据沼泽”,拥抱“活水湖”:数新智能基于CyberEngine与Apache Paimon的新一代数据湖仓架构
大数据
实习僧企业版13 小时前
如何为中小企业点亮校招吸引力的灯塔
大数据·春招·雇主品牌·招聘技巧·口碑
塔能物联运维14 小时前
高密度机柜满载怎么办?热管理的“最后一厘米”:两相液冷
大数据
王苏安说钢材A15 小时前
无锡佳钛合不锈钢有限公司三通的焊接工艺
大数据
跨境卫士-小汪16 小时前
旺季前成本项变多跨境卖家如何设定更稳的备货优先级
大数据·人工智能·产品运营·跨境电商·亚马逊
地球资源数据云16 小时前
1951-2025年中国逐年1千米逐月总降水量区域统计数据集_年表_县
大数据·数据结构·数据库·数据仓库·人工智能
云飞云共享云桌面16 小时前
精密机械制造工厂研发部门使用SolidWorks和ug,三维设计云桌面如何选择?
大数据·运维·服务器·网络·数据库·人工智能·制造
互联网推荐官16 小时前
定制开发落地实践:D-coding 销售采购系统赋能上海多终端软件项目建设
大数据