目录

  • 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. 源码编译

  1. 先进行代码格式化
D:\self-directory\Flink-source-read\flink-release-1.15.0> mvn spotless:apply

不然会报异常:The following files had format violations

  1. 执行编译

慢速编译方法如下:

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. 编译问题记录

  1. 编译flink-connector-pulsar模块时,报如下错误:
protoc did not exit cleanly

这是protobuf写入protoc文件失败,导致protoc退出异常。我这里的原因是flink-release-1.15.0文件夹的父文件夹名称包含中文,将父文件夹名称修改成英文就好了

  1. 当配置了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源码编译相关推荐

  1. 涨薪秘籍之源码篇:Spring全家桶源码解读,大师晋级笔记

    最近很多人留言说今年找工作太难了,要涨薪几乎更难了 !真的就这么悲观吗?其实不然,我们企业一直都在大量的招人,一直都没停过.只是一点和之前不一样要求变高了,优秀的人一直都缺. 我身边朋友所在的大厂也一 ...

  2. 怎么免费获取帆软9.0激活码,帆软8.0激活码,如何激活

    FineReport作为领先的企业级Web报表一直致力于解决中国式报表应用难题,它有两个版本:个人免费版,企业收费版.帆软公司对免费版用户非常友好,下面就来介绍一下怎么免费获取帆软9.0激活码,帆软8 ...

  3. access驱动程序_Linux驱动程序学习二 (续) scull 源码在内核5.4.0上的编译调试

    <LINUX设备驱动程序>第三章提供了源码scull,但是由于我用的是5.4.0内核,书中的是2.6.10内核,内核发生了很大的变化,因此编译scull源码花费了不少时间,下面是编译调试记 ...

  4. 深入JVM源码篇-1-如何查看JVM源码

    内容 有木有这样的苦恼,看了jdk源码,还是不清楚底层如何实现的.随我一起进入JVM源码,一探究竟吧. 寻找JVM源码 github openjdk hotspot 打包下载 jdk8 寻找IDE C ...

  5. 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 ...

  6. SRS4.0源码分析-CMake

    本文采用的 SRS 版本是 4.0-b8 , 下载地址:github <SRS4.0源码分析-调试环境搭建> 讲了 SRS 在 Clion 里面的调试,本文主要讲解 srs-4.0-b8\ ...

  7. BAT高级架构师合力熬夜15天,肝出了这份PDF版《Android百大框架源码解析》,还不快快码住。。。

    前言 为什么要阅读源码? 现在中高级Android岗位面试中,对于各种框架的源码都会刨根问底,从而来判断应试者的业务能力边际所在.但是很多开发者习惯直接搬运,对各种框架的源码都没有过深入研究,在面试时 ...

  8. Elasticsearch-7.8.0源码编译

    1.环境准备 操作系统:Win10x64 JDK版本:Java version "14.0.2"--elasticsearch7.8.0最低要JDK14 Gradle版本:Grad ...

  9. 轻松入门进阶Flink第十课 Flink 面试

    第39讲:Flink 面试-基础篇 到目前为止,关于 Flink 的学习我们就告一段落了,接下来我们将进入最后一个面试模块的学习.在当前大背景下,面试这一关是求职者必须要面对的,也能从侧面考察对 Fl ...

最新文章

  1. [通用技术]在不同语言中用协程实现全排列算法(C++/Lua/Python/C#)
  2. jQuery.delegate() 函数详解
  3. 解决Aireplay-ng信道问题
  4. 7.python实现高效端口扫描器之nmap模块
  5. 单级离心压缩机行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  6. CAN分析仪 USBCAN USB转CAN CAN转换调试器接口卡使用指导
  7. 《未来世界的幸存者》 读后感言
  8. Vim插件推荐--模糊搜索插件ctrlp使用方法
  9. 揭密Emulex SAN光纤云存储网关的概念
  10. sheet(isPresented:onDismiss:content:) (SwiftUI 中文文档手册 教程含源码)
  11. Chrome浏览器默认全屏启动(非--kiosk模式)
  12. LeetCode简单题643.子数组的最大平均数I
  13. x3g格式 3d打印_10款最受欢迎3D建模软件大搜罗!看看有没有你常用的软件?
  14. 蛙蛙推荐:蛙蛙牌网页捕捉器
  15. 微信小程序实现押金管理(支付押金、申请退还押金、押金明细)
  16. ubuntu14.10+QT4编写ARM9(mini2440)应用的配置与安装
  17. 怀念—伤心者,不痛不痒,冷暖自知
  18. 字符串--Leetcode (python)
  19. 禁用微信浏览器字体调整的方法
  20. 基于深度学习的图标型验证码识别系统(包含完整代码、界面)

热门文章

  1. 时间的格局:让每一分钟为未来增值
  2. 农业工程与信息技术是计算机类吗,中国海洋大学农业工程与信息技术概论2020考研复试大纲...
  3. Python 高级编程和异步IO并发编程 --13_4 call_soon,call_at,call_soon_threadsafe
  4. 极客星球 | FATE联邦学习框架理论与应用初探
  5. to_date函数在hive、presto、spark中的区别
  6. 三种内存测试软件的使用说明
  7. 诺康得NKD完成500万天使轮融资,专注于糖化学细胞治疗
  8. CGTrader年度压轴大赛——“CG游戏角色竞赛”赛果揭晓!!!
  9. Docker swarm集群管理工具
  10. 0.2 - 机械加工工艺-----机加工设备及表面处理