【Flink原理和应用】:记一次Flink源码编译的过程

文章目录

  • 前言
  • 1. 克隆Flink源码
  • 2. 直接进行打包编译
  • 3. 在intellij IDE编译
  • 4. 最后验证

前言

最近在预研Flink Gelly源码中,给Gelly源码添加了几个功能点,想打包发布,应用在自己的项目中部署。然而源码编译的过程中,不是一帆风顺了,踩了些坑,所以本文记录了一次源码编译的过程。

1. 克隆Flink源码

首先,把Flink源码克隆到本地:

git clone https://github.com/apache/flink.git

2. 直接进行打包编译

执行:

mvn clean package -DskipTests

报错了,有些包在http://maven.aliyun.com/nexus/content/groups/public下载不到。

因为阿里云的镜像有些包估计还不全面。所以需要修改maven的settings.xml文件,用国际化的镜像来做为maven的公共库:

  <mirror>
      	<id>UKid>
		  <mirrorOf>centralmirrorOf>
		  <name>UK Centralname>
		  <url>http://uk.maven.org/maven2url>
    mirror>

注意这里还需要做步操作,删除mavenReposity/org/apache/flink目录。

然后再一次执行编译,报错了,错误日志:

 Failed to execute goal org.apache.maven.plugins:maven-checkstyle-plugin:2.17

错误日志消息很明显,是maven-checkstyle-plugin出错了。

maven checkstyle plugin的简单介绍

为了在提交代码之前做一些必要的代码检查,我们需要使用一些工具来辅助我们的工作——对于maven工程我们可以使用maven checkstyle plugin。

执行:

mvn checkstyle:checkstyle

命令检查工程是否满足checkstyle。

采取对策:就是把根目录flink-release-1.7里的pom.xml文件的这部分注释掉:


3. 在intellij IDE编译

Flink的编译需要scala环境。因为我的电脑没有安装全局的scala环境。所以我才用IDE来编译,在IDE里安装scala插件即可。

第一步:将整个Flink项目导入IDE。
第二步:在IDE里执行maven的install指令。报错了:

Failed to execute goal org.apache.maven.plugins ...
There are test failures

这是因为某些模块的test用例测试运行失败,导致我们的编译终止了。

解决对策:在flink-parent的pom.xml配上:

<build>
   <plugins>
        <plugin>
            <groupId>org.apache.maven.pluginsgroupId>
            <artifactId>maven-surefire-pluginartifactId>
            <configuration>
                <testFailureIgnore>truetestFailureIgnore>            
            configuration>
        plugin>
    plugins>
build>

然后还有个错误,就是license问题,因为我在源码里添加了些文件,这些文件是没有Licensed to the Apache Software Foundation (ASF)注释的,然后源码编译时,报license错误。那么怎么解决呢?

解决对策:注释掉flink-parent的pom.xml文件的如下部分:


最后在IDE对flink-parent执行:

mvn install -DskipTests

之后。build success。

4. 最后验证

我在某些模块添加的Demo类,然后执行install编译。在mavenReposity/org/apache/flink仓库目录里面生成的jar里包含了我的Demo.class文件。

备注:这个其实还有些细小的坑,我这里没有记录下来,在编译过程中,要注意调试。以后一定随时做好笔记,把细节流程记录下来,防止下次在同一个坑中消耗时间。

你可能感兴趣的:(Flink,Flink原理和应用)