Flink 源码编译

news2025/7/17 11:52:03

打包命令

打包整个项目

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 symbol
  symbol:   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.coloradmin.cn/o/2343312.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

docker的安装和简单使用(ubuntu环境)

环境准备 这里用的是linux的环境&#xff0c;如果没有云服务器的话&#xff0c;就是用虚拟环境吧。 虚拟环境的安装参考&#xff1a;vmware17的安装 linux镜像的安装 docker安装 我使用的是ubuntu&#xff0c;使用以下命令&#xff1a; 更新本地软件包索引 sudo apt u…

EasyRTC音视频实时通话在线教育解决方案:打造沉浸式互动教学新体验

一、方案概述 EasyRTC是一款基于WebRTC技术的实时音视频通信平台&#xff0c;为在线教育行业提供了高效、稳定、低延迟的互动教学解决方案。本方案将EasyRTC技术深度整合到在线教育场景中&#xff0c;实现师生间的实时音视频互动等核心功能&#xff0c;打造沉浸式的远程学习体…

【分布式系统中的“瑞士军刀”_ Zookeeper】一、Zookeeper 快速入门和核心概念

在分布式系统的复杂世界里&#xff0c;协调与同步是确保系统稳定运行的关键所在。Zookeeper 作为分布式协调服务的 “瑞士军刀”&#xff0c;为众多分布式项目提供了高效、可靠的协调解决方案。无论是在分布式锁的实现、配置管理&#xff0c;还是在服务注册与发现等场景中&…

Electron从入门到入门

项目说明 项目地址 项目地址&#xff1a;https://gitee.com/ruirui-study/electron-demo 本项目为示例项目&#xff0c;代码注释非常清晰&#xff0c;给大家当做入门项目吧。 其实很多东西都可以在我这基础上添加或修改、市面上有些已开源的项目&#xff0c;但是太臃肿了&am…

优化提示词方面可以使用的数学方法理论:信息熵,概率论 ,最优化理论

优化提示词方面可以使用的数学方法理论:信息熵,概率论 ,最优化理论 目录 优化提示词方面可以使用的数学方法理论:信息熵,概率论 ,最优化理论信息论信息熵明确问题主题提供具体细节限定回答方向规范语言表达概率论最优化理论信息论 原理:信息论中的熵可以衡量信息的不确定性。…

腾讯一面面经:总结一下

1. Java 中的 和 equals 有什么区别&#xff1f;比较对象时使用哪一个 1. 操作符&#xff1a; 用于比较对象的内存地址&#xff08;引用是否相同&#xff09;。 对于基本数据类型、 比较的是值。&#xff08;8种基本数据类型&#xff09;对于引用数据类型、 比较的是两个引…

Golang | 倒排索引

文章目录 倒排索引的设计倒排索引v0版实现 倒排索引的设计 通用搜索引擎 v.s. 垂直搜索引擎&#xff1a; 通用搜索引擎&#xff1a;什么都可以搜索&#xff0c;更加智能化垂直搜索引擎&#xff1a;只能搜自家数据库里面的内容&#xff0c;一般都带着搜索条件&#xff0c;搜索一…

大模型驱动智能服务变革:从全流程赋能到行业纵深落地

大模型技术的快速发展&#xff0c;正深刻改变着人工智能的研发与应用模式。作为"软硬协同、开箱即用"的智能化基础设施&#xff0c;大模型一体机通过整合计算硬件、部署平台和预置模型&#xff0c;重构了传统AI部署方式&#xff0c;成为推动AI普惠化和行业落地的重要…

【初识Trae】字节跳动推出的下一代AI原生IDE,重新定义智能编程

​ 初识官网文档 从官网可以看到有两个大标签页&#xff0c;即Trae IDE CN和Trae插件&#xff0c;这就说明Trae在发布Trae IDE的同时考虑到对主流IDE的插件支持&#xff0c;这一点非常有心&#xff0c;但是我估测Trae IDE的体验更好&#xff08;就是AI IDE出生&#xff0c;毕…

装备制造企业选型:什么样的项目管理系统最合适?

个性化定制需求日益增加、项目周期长、供应链协同复杂、成本控制难度大、以及设计、生产、安装、售后等环节协同不畅。这些挑战使得装备制造企业在传统的管理方式捉襟见肘&#xff0c;迫切需要一套高效、智能的项目管理系统来提升运营效率和盈利能力。 那么&#xff0c;对于装…

QT多元素控件及其属性

Qt中提供的多元素控件有&#xff1a; QListWidget QListView QTableWidget QTableView QTreeWidget QTreeView widget和view多元素控件的区别&#xff1a; view是更底层的实现&#xff0c;widget是基于view封装而来&#xff0c;view是MVC结构的一种典型实现 MVC结构&am…

如何快速高效学习Python?

如何快速高效学习Python&#xff1f; How to Fastly and Effectively Learn Python Programming? By JacksonML 1. Python年轻吗&#xff1f; Python自1991年诞生到现在&#xff0c;已经经历了三十四年或者更长时间了。毕竟&#xff0c;Python之父 – 吉多范罗苏姆先生(Gu…

【网络原理】TCP提升效率机制(二):流量控制和拥塞控制

目录 一. 前言 二. 流量控制 三. 拥塞控制 一. 前言 TCP的可靠传输依靠确认应答机制&#xff0c;超时重传机制是对确认应答的一种补充&#xff0c;解决了丢包问题 为了提高传输效率&#xff0c;避免大量的时间都浪费在等待应答的过程&#xff0c;故引入了滑动窗口机制&…

语音合成之六端到端TTS模型的演进

端到端TTS模型的演进 引言Tacotron&#xff1a;奠基之作FastSpeech&#xff1a;解决效率瓶颈VITS&#xff1a;实现高保真和富有表现力的语音SparkTTS&#xff1a;利用LLM实现高效可控的TTSCosyvoice&#xff1a;一种可扩展的多语种TTS方法端到端TTS模型的演进与未来方向 引言 …

Properties配置文件

Properties(是一个特殊的Map)默认键值都是String类型 备注:Properties能调用Map中的所有方法,但由于放入Properties中的key-value都是String类型,Properties中提供了特殊的存值和取值的方法,所以尽量不要用Map中的方法,如下 Properties的作用 A、将内存中的数据写入到…

【尚硅谷Redis6】自用学习笔记

Redis介绍 Redis是单线程 多路IO复用技术&#xff08;类似黄牛买票&#xff09; 默认有16个库&#xff0c;用select进行切换 默认端口号为6379 Memcached&#xff1a;多线程 锁&#xff08;数据类型单一&#xff0c;不支持持久化&#xff09; 五大常用数据类型 Redis key …

Vue里面elementUi-aside 和el-main不垂直排列

先说解决方法 main.js少导包 import element-ui/lib/theme-chalk/index.css; //加入此行即可 问题复现 排查了一个小时终于找出来问题了&#xff0c;建议导包去看官方的文档&#xff0c;作者就是因为看了别人的导包流程导致的问题 导包官网地址Element UI导包快速入门

VS Code搭建C/C++开发环境

文章目录 一、VScode 是什么?二、VScode的下载和安装1、下载2、安装 三、环境介绍1、安装中文插件 四、VScode配置 C/C开发环境1、下载MinGW-w64 编译器套件2、配置MingGW643、验证4、安装C/C插件 五、在VSCode上编写C语言代码并编译成功1、打开文件夹2、新建C语言文件&#x…

mysql 在 dbeaver中下载驱动失败处理

直接上解决方法 1. 在mysql官网下载驱动 2. 引入dbeaver中即可 3. 最后再双击即可

Java 安全:如何防止 SQL 注入与 XSS 攻击?

Java 安全&#xff1a;如何防止 SQL 注入与 XSS 攻击&#xff1f; 在 Java 开发领域&#xff0c;安全问题至关重要&#xff0c;而 SQL 注入和 XSS 攻击是两种常见的安全威胁。本文将深入探讨如何有效防止这两种攻击&#xff0c;通过详细代码实例为您呈现解决方案。 一、SQL 注…