【Flink源码篇】Flink 1.15.0源码编译

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_x64

D:\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.5

D:\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-cli
 of 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

激活profile
先选择java11-target这个profile,然后点击刷新按钮进行刷新,就可以在IDEA中使用jdk11进行调试了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值