当前位置: 首页 > 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文件夹。

http://www.xdnf.cn/news/117901.html

相关文章:

  • 1、AI及LLM基础:Python语法入门教程
  • 达梦并行收集统计信息
  • HarmonyOS:一多能力介绍:一次开发,多端部署
  • 推荐几个可以在手机电脑同步的的备忘记事工具
  • 设计模式--建造者模式详解
  • 机器学习在网络安全中的应用:守护数字世界的防线
  • 基础的 IO
  • Playwright自动化测试实战指南-高级部分
  • Ext Direct 功能与使用详解
  • Java并发编程 - ReentrantLock
  • HTML应用指南:利用GET请求获取微博签到位置信息
  • java—11 Redis
  • 基于大模型的结肠癌全病程预测与诊疗方案研究
  • 第五章:Framework/Tooling Abstraction
  • 凝聚湾区网信力量!向成电子受邀参加2025麒麟软件华南生态渠道大会
  • Go语言中包导入下划线的作用解析
  • Python学习笔记(三)(程序流程控制)
  • SEO的关键词研究与优化 第二章
  • 前端基础之《Vue(9)—混入》
  • Linux操作系统--基础I/O(上)
  • Freertos----软件定时器
  • WPS右键菜单中“上传到云文档”消失,使用命令行注册解决
  • LeetCode-Hot100
  • 数据集-目标检测系列- F35 战斗机 检测数据集 F35 plane >> DataBall
  • 【安全扫描器原理】网络扫描算法
  • 【c++】【STL库】vector类详解
  • C语言基础(day0424)
  • Java基础系列-HashMap源码解析4-基本概念
  • 各种插值方法的Python实现
  • BERT BERT