【Flink源码篇】Flink 1.15.0源码编译
目录
- 1. 下载源码并解压
- 2. Flink项目配置
- 3. 源码编译
- 4. 编译问题记录
- 5. IDEA调试Flink程序
1. 下载源码并解压
从github下载Flink的源码:https://github.com/apache/flink/archive/refs/tags/release-1.15.0.zip
然后进行解压
2. Flink项目配置
使用IDEA打开Flink-release-1.15.0,然后配置maven 3.2.5,再配置Java11
对于本地已经配置了其它版本的maven,使用命令行时,可以配置命令行的临时maven
D:\self-directory\Flink-source-read\flink-release-1.15.0>set JAVA_HOME=D:\install_software\java11\zulu11.56.19-ca-jdk11.0.15-win_x64D:\self-directory\Flink-source-read\flink-release-1.15.0>
D:\self-directory\Flink-source-read\flink-release-1.15.0>set M2_HOME=D:\install_software\maven\apache-maven-3.2.5D:\self-directory\Flink-source-read\flink-release-1.15.0>
D:\self-directory\Flink-source-read\flink-release-1.15.0>set PATH=%M2_HOME%\bin;%PATH%D:\self-directory\Flink-source-read\flink-release-1.15.0>
D:\self-directory\Flink-source-read\flink-release-1.15.0>mvn -v
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-15T01:29:23+08:00)
Maven home: D:\install_software\maven\apache-maven-3.2.5
Java version: 11.0.15, vendor: Azul Systems, Inc.
Java home: D:\install_software\java11\zulu11.56.19-ca-jdk11.0.15-win_x64
Default locale: zh_CN, platform encoding: GBK
OS name: "windows 10", version: "10.0", arch: "amd64", family: "dos"
D:\self-directory\Flink-source-read\flink-release-1.15.0>
最后导入Flink的各种dependencies
3. 源码编译
- 先进行代码格式化
D:\self-directory\Flink-source-read\flink-release-1.15.0> mvn spotless:apply
不然会报异常:The following files had format violations
- 执行编译
慢速编译方法如下:
D:\self-directory\Flink-source-read\flink-release-1.15.0> mvn clean install -DskipTests -Drat.skip=true -Pjava11-target
参数说明如下:
- -Drat.skip=true: 跳过rat插件的license检查
- -Pjava11-target: 编译成java11,默认是编译成java8
快速编译方法如下:
D:\self-directory\Flink-source-read\flink-release-1.15.0> mvn clean install -DskipTests -Dfast -Pjava11-target,skip-webui-build -T 1C
参数说明如下:
- -Dfast:跳过QA插件的代码审查,和跳过javadoc的生成
- -Pjava11-target,skip-webui-build: 跳过web ui的编译。编译成java11,默认是编译成java8
- -T 1C:一个CPU core编译一个module,并行进行编译
编译后的可执行文件不是一个jar包,是一个文件夹:flink-release-1.15.0\flink-dist\target\flink-1.15.0-bin\flink-1.15.0
4. 编译问题记录
- 编译flink-connector-pulsar模块时,报如下错误:
protoc did not exit cleanly
这是protobuf写入protoc文件失败,导致protoc退出异常。我这里的原因是flink-release-1.15.0文件夹的父文件夹名称包含中文,将父文件夹名称修改成英文就好了
- 当配置了aliyun的镜像仓库,使用spotless-maven-plugin如果报如下错误
[ERROR] Failed to execute goal com.diffplug.spotless:spotless-maven-plugin:2.4.2:apply (default-cli) on project flink-annotations: Execution default-cliof goal com.diffplug.spotless:spotless-maven-plugin:2.4.2:apply failed: Unable to resolve dependencies: Failed to collect dependencies at com.google.go
oglejavaformat:google-java-format:jar:1.7 -> com.google.errorprone:javac-shaded:jar:9+181-r4173-1: Failed to read artifact descriptor for com.google.err
orprone:javac-shaded:jar:9+181-r4173-1: Could not transfer artifact com.google.errorprone:javac-shaded:pom:9+181-r4173-1 from/to alimaven (https://maven
.aliyun.com/repository/central): authorization failed for https://maven.aliyun.com/repository/central/com/google/errorprone/javac-shaded/9+181-r4173-1/j
avac-shaded-9+181-r4173-1.pom, status: 403 Forbidden -> [Help 1]
[ERROR]
查看aliyun仓库有这个pom文件和jar包,但是去下载的时候,还是会出错
这大概率是你使用的maven版本不对,推荐使用maven 3.2.5,因为其它版本maven不能shade away certain dependencies。如果还是报错,可以使用如下3种方法的其中1种
第一:换成从maven central下载
第二:手动从maven central下载pom、pom.sha1、jar、jar.sha1到本地仓库
第三:添加<skip>true</skip>
到pom.xml(flink-parent)如下位置
......省略部分......<pluginManagement><plugins>
......省略部分......<plugin><groupId>com.diffplug.spotless</groupId><artifactId>spotless-maven-plugin</artifactId><version>${spotless.version}</version><configuration><skip>true</skip><java><googleJavaFormat><version>1.7</version><style>AOSP</style></googleJavaFormat><!-- \# refers to the static imports --><importOrder><order>org.apache.flink,org.apache.flink.shaded,,javax,java,scala,\#</order></importOrder><removeUnusedImports /></java></configuration><executions><execution><id>spotless-check</id><phase>validate</phase><goals><goal>check</goal></goals></execution></executions></plugin>
......省略部分......</plugins></pluginManagement></build></project>
让flink不使用spotless-maven-plugin插件,这样也就不会去下载javac-shaded的pom和jar包了
这样编译flink源码的时候就不会进行QA代码审查。同样也不用执行mvn spotless:apply
命令对代码进行格式化了
5. IDEA调试Flink程序
使用IDEA调试Flink程序时,会报如下错误:
java: 程序包sun.misc不存在
但是我们看IDEA配置的zulu-11的jdk-unsupported模块下是有sun.misc的,但是它明确表明这是不支持的。而flink-parent这个pom默认是使用jdk8的,所以才会报程序包不存在的错误
在flink-parent的pom中给id为java11-target的profile,配置activateByDefault为true,这个对IDEA调式程序是不生效的。可以通过如下方式在IDEA中明确激活profile
先选择java11-target这个profile,然后点击刷新按钮进行刷新,就可以在IDEA中使用jdk11进行调试了
【Flink源码篇】Flink 1.15.0源码编译相关推荐
- 涨薪秘籍之源码篇:Spring全家桶源码解读,大师晋级笔记
最近很多人留言说今年找工作太难了,要涨薪几乎更难了 !真的就这么悲观吗?其实不然,我们企业一直都在大量的招人,一直都没停过.只是一点和之前不一样要求变高了,优秀的人一直都缺. 我身边朋友所在的大厂也一 ...
- 怎么免费获取帆软9.0激活码,帆软8.0激活码,如何激活
FineReport作为领先的企业级Web报表一直致力于解决中国式报表应用难题,它有两个版本:个人免费版,企业收费版.帆软公司对免费版用户非常友好,下面就来介绍一下怎么免费获取帆软9.0激活码,帆软8 ...
- access驱动程序_Linux驱动程序学习二 (续) scull 源码在内核5.4.0上的编译调试
<LINUX设备驱动程序>第三章提供了源码scull,但是由于我用的是5.4.0内核,书中的是2.6.10内核,内核发生了很大的变化,因此编译scull源码花费了不少时间,下面是编译调试记 ...
- 深入JVM源码篇-1-如何查看JVM源码
内容 有木有这样的苦恼,看了jdk源码,还是不清楚底层如何实现的.随我一起进入JVM源码,一探究竟吧. 寻找JVM源码 github openjdk hotspot 打包下载 jdk8 寻找IDE C ...
- mysql5.0源码安装_linux小白 mysql5.0源码安装配置
安装mysql-5.0.45.tar.gz(该软件包下载地址:http://www.filewatcher.com/m/mysql-5.0.45.tar.gz.24433261-0.html) # g ...
- SRS4.0源码分析-CMake
本文采用的 SRS 版本是 4.0-b8 , 下载地址:github <SRS4.0源码分析-调试环境搭建> 讲了 SRS 在 Clion 里面的调试,本文主要讲解 srs-4.0-b8\ ...
- BAT高级架构师合力熬夜15天,肝出了这份PDF版《Android百大框架源码解析》,还不快快码住。。。
前言 为什么要阅读源码? 现在中高级Android岗位面试中,对于各种框架的源码都会刨根问底,从而来判断应试者的业务能力边际所在.但是很多开发者习惯直接搬运,对各种框架的源码都没有过深入研究,在面试时 ...
- Elasticsearch-7.8.0源码编译
1.环境准备 操作系统:Win10x64 JDK版本:Java version "14.0.2"--elasticsearch7.8.0最低要JDK14 Gradle版本:Grad ...
- 轻松入门进阶Flink第十课 Flink 面试
第39讲:Flink 面试-基础篇 到目前为止,关于 Flink 的学习我们就告一段落了,接下来我们将进入最后一个面试模块的学习.在当前大背景下,面试这一关是求职者必须要面对的,也能从侧面考察对 Fl ...
最新文章
- [通用技术]在不同语言中用协程实现全排列算法(C++/Lua/Python/C#)
- jQuery.delegate() 函数详解
- 解决Aireplay-ng信道问题
- 7.python实现高效端口扫描器之nmap模块
- 单级离心压缩机行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- CAN分析仪 USBCAN USB转CAN CAN转换调试器接口卡使用指导
- 《未来世界的幸存者》 读后感言
- Vim插件推荐--模糊搜索插件ctrlp使用方法
- 揭密Emulex SAN光纤云存储网关的概念
- sheet(isPresented:onDismiss:content:) (SwiftUI 中文文档手册 教程含源码)
- Chrome浏览器默认全屏启动(非--kiosk模式)
- LeetCode简单题643.子数组的最大平均数I
- x3g格式 3d打印_10款最受欢迎3D建模软件大搜罗!看看有没有你常用的软件?
- 蛙蛙推荐:蛙蛙牌网页捕捉器
- 微信小程序实现押金管理(支付押金、申请退还押金、押金明细)
- ubuntu14.10+QT4编写ARM9(mini2440)应用的配置与安装
- 怀念—伤心者,不痛不痒,冷暖自知
- 字符串--Leetcode (python)
- 禁用微信浏览器字体调整的方法
- 基于深度学习的图标型验证码识别系统(包含完整代码、界面)
热门文章
- 时间的格局:让每一分钟为未来增值
- 农业工程与信息技术是计算机类吗,中国海洋大学农业工程与信息技术概论2020考研复试大纲...
- Python 高级编程和异步IO并发编程 --13_4 call_soon,call_at,call_soon_threadsafe
- 极客星球 | FATE联邦学习框架理论与应用初探
- to_date函数在hive、presto、spark中的区别
- 三种内存测试软件的使用说明
- 诺康得NKD完成500万天使轮融资,专注于糖化学细胞治疗
- CGTrader年度压轴大赛——“CG游戏角色竞赛”赛果揭晓!!!
- Docker swarm集群管理工具
- 0.2 - 机械加工工艺-----机加工设备及表面处理