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

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

相关文章:

  • 数据库进阶之MySQL 程序
  • 精益数据分析(19/126):走出数据误区,拥抱创业愿景
  • 浅谈国产数据库多租户方案:提升云计算与SaaS的资源管理效率
  • arm64适配系列文章-第三章-arm64环境上mariadb的部署
  • Spring 过滤器详解:从基础到实战应用
  • Kafka的ISR机制是什么?如何保证数据一致性?
  • Milvus(5):Collections 查看、修改、加载和释放、删除
  • vue3 实现将html内容导出为图片、pdf和word
  • python的mtcnn检测图片中的人脸并标框
  • Android移动应用开发入门示例:Activity跳转界面
  • 数据仓库建设全解析!
  • Whisper微调及制作方言数据集
  • 动态哈希映射深度指南:从基础到高阶实现与优化
  • Vue开发网站会有“#”原因是前端路由使用了 Hash 模式
  • Qt使用 SQLite 数据库的基本方法
  • 代码随想录算法训练营第二十六天
  • Python爬虫第19节-动态渲染页面抓取之Splash使用下篇
  • React-组件和props
  • 【Python爬虫实战篇】--Selenium爬取Mysteel数据
  • Cephalon端脑云:神经形态计算+边缘AI·重定义云端算力
  • 政治局会议:创设新的结构性货币政策工具,设立新型政策性金融工具,支持科技创新、扩大消费、稳定外贸等
  • 2025年两院院士增选工作启动,名额均不超过100名
  • 高糖高脂食物可能让你 “迷路”
  • 173.9亿人次!一季度我国交通出行火热
  • 山东一季度GDP为23466亿元,同比增长6.0%
  • 秦洪看盘|平淡走势中或将孕育主旋律