Flink 源码开发环境搭建指南:使用 IntelliJ IDEA 与 PyCharm 导入 Apache Flink 工程
大数据流处理批处理数据工程【免费下载链接】flink项目地址https://gitcode.com/gh_mirrors/fli/flink点击查看免费下载本篇技术指南面向计划为 Apache Flink 项目本身贡献代码的开发者完整讲解如何将 Flink 多模块 Maven 工程导入 IntelliJ IDEA、配置代码格式化Spotless google-java-format / scalafmt、Checkstyle 静态检查、PyFlink 的 Python 开发环境并梳理常见编译报错的解决方案。读完本文你将能够在 IDE 中流畅地浏览、编写、格式化与校验 Flink 源码并跑通本地构建与检查流程。若你只是想编写 Flink 应用程序而非修改 Flink 本身请直接参考 Java/Scala API 快速上手文档。提示当 IDE 中出现任何异常时请先在命令行用 Maven 验证——mvn clean package -DskipTests——因为问题很可能出在 IDE 自身Bug 或配置不当而非 Flink 代码。准备工作获取源码并优化 git blame 体验克隆 Flink 源码仓库首先从官方源码仓库检出 Flink 源码git clone https://github.com/apache/flink.git克隆完成后仓库根目录即包含 pom.xmlMaven 父工程定义、flink-core、flink-runtime、flink-streaming-java、flink-table、flink-python等数十个模块以及 .git-blame-ignore-revs 等开发辅助文件。忽略大型重构提交git blameFlink 维护者在.git-blame-ignore-revs中记录了一批大型重构提交的哈希。查看代码变更历史git blame时这些提交会产生大量噪音。可以在 git 与 IDE 中忽略它们git config blame.ignoreRevsFile .git-blame-ignore-revs执行后git blame会跳过这些重构提交将注释归因到真正引入代码改动的提交大幅提升追溯历史时的可读性。IntelliJ IDEA 完整配置指南以下指南基于 IntelliJ IDEA 2021.2 编写其他版本的菜单细节可能略有差异请务必按步骤准确操作。导入 Flink 工程选择 New → Project from Existing Sources。选择克隆好的 Flink 仓库根目录。选择 Import project from external model并选中 Maven。保留默认选项连续点击 Next直到进入 SDK 配置界面。若列表中没有 SDK点击左上角 新建选择 JDK指定 JDK 安装目录并点击 OK。经验法则选择与当前激活的 Maven Profile 匹配的 JDK 版本Flink 通过 Maven Profile 区分 JDK 8 与 JDK 11 编译目标见下文常见问题。继续点击 Next 直至导入完成。打开 Maven 面板或右键工程 → Maven执行 Generate Sources and Update Folders等效命令为mvn clean package -DskipTests。这一步会触发注解处理器与代码生成器产出编译所需的部分源码。执行 Build → Build Project 构建整个工程。配置 Copyright ProfileFlink 要求每个源文件头部携带 Apache License 声明仓库内所有文件均如此例如 tools/maven/checkstyle.xml 与 flink-python/tox.ini 的开头注释。在 IntelliJ 中可自动化打开 Settings → Editor → Copyright → Copyright Profiles。新建 Profile命名为 Apache。将以下文本粘贴为 license 文本Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the License); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an AS IS BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.回到 Editor → Copyright为本项目选择 Apache 作为默认 Profile。点击 Apply 生效。安装必需的插件打开 Settings → Plugins → Marketplace搜索并安装以下插件必要时按提示重启 IDE插件用途备注ScalaScala 源码支持flink-table-planner等模块含大量 Scala 代码必装PythonPyFlink 支持若不做 PyFlink 可跳过Save Actions保存时自动格式化新版 IDEA 建议改用内置 Actions on SaveCheckstyle-IDEACheckstyle 静态检查集成必装另外还需要安装google-java-format插件但必须使用特定版本 v1.7.0.6下载该版本的 ZIP 包后在 Settings → Plugins 点击齿轮图标选择 Install Plugin from Disk定位到 ZIP 文件安装。请务必不要更新此插件——版本不匹配会导致格式化结果与 Flink 的 Spotless 配置不一致。代码格式化Code FormattingFlink 使用 SpotlessMaven 插件统一格式化Java 采用 google-java-formatScala 采用 scalafmt。这与根 pom.xml 中的 spotless-maven-plugin 配置严格对应plugin groupIdcom.diffplug.spotless/groupId artifactIdspotless-maven-plugin/artifactId version${spotless.version}/version configuration skip${spotless.skip}/skip java googleJavaFormat version1.7/version styleAOSP/style /googleJavaFormat !-- \# refers to the static imports -- importOrder orderorg.apache.flink,org.apache.flink.shaded,,javax,java,scala,\#/order /importOrder removeUnusedImports / /java /configuration ... /plugin可见 Flink 对 Java 代码强制使用google-java-format 1.7 的 AOSPAndroid Open Source Project风格并按org.apache.flink → org.apache.flink.shaded → 其他 → javax → java → scala → 静态导入的顺序整理 import\#表示静态导入同时自动移除未使用的 import。在 IDE 中推荐启用保存时自动格式化Settings → Other Settings → google-java-format Settings勾选启用插件并将代码风格改为Android Open Source Project (AOSP) style。Settings → Editor → Code Style → Scala将 Formatter 改为scalafmt。Settings → Tools → Actions on Save在 Formatting Actions 中勾选 Optimize imports 与 Reformat code并从 Reformat code 旁的文件类型列表中选择 Java 与 Scala。对于早期版本的 IntelliJ IDEA无内置 Actions on SaveSettings → Other Settings → Save Actions。General 下启用保存触发例如 Activate save actions on save。Formatting Actions 下勾选 Optimize imports 与 Reformat file。File Path Inclusions 中添加.*\.java与.*\.scala避免误格式化其他文件类型。也可以在命令行用 Maven 对整个工程Java Scala一键格式化mvn spotless:apply对应的校验任务spotless-check绑定在 Maven 的validate阶段也就是说任何一次普通mvn构建都会自动检查格式是否符合规范。Java Checkstyle 配置Flink 使用 Checkstyle 强制执行静态编码规范当前仓库根 pom.xml 中声明的 Checkstyle 版本为9.3checkstyle.version9.3/checkstyle.version与 IDE 中应选择的版本一致。注意部分模块未被 Checkstyle 覆盖例如flink-core、flink-optimizer、flink-runtime。即便如此在这些模块中工作也请尽量遵循 Checkstyle 规则。在 IntelliJ 中配置 CheckstyleSettings → Tools → Checkstyle。将 Scan Scope 设为 Only Java sources (including tests)。Checkstyle Version 选择9.3。Configuration File 下点击 新建配置。Description 填 Flink。选择 Use a local Checkstyle file指向克隆仓库中的 tools/maven/checkstyle.xml。勾选 Store relative to project location点击 Next。配置属性checkstyle.suppressions.file值为suppressions.xml点击 Next。点击 Finish。仅保留 Flink 作为激活的配置文件点击 Apply。上述suppressions.xml对应仓库中的 tools/maven/suppressions.xml另有suppressions-core.xml、suppressions-optimizer.xml、suppressions-runtime.xml等分模块抑制文件。checkstyle.xml 本身定义了若干基础规则例如TODO 注释不得包含用户名TODO(格式报错、禁止行尾空白、禁止使用已废弃的Throwables.propagate(、单文件最大行数 3100FileLength并支持CHECKSTYLE.OFF/ON注释来局部抑制检查。接着导入 Java 代码风格方案Settings → Editor → Code Style → Java。点击 Scheme 旁的齿轮图标选择 Import Scheme → Checkstyle Configuration。导航并选择仓库内的 tools/maven/checkstyle.xml。验证配置是否生效点击 View → Tool Windows → Checkstyle在打开的窗口中点击 Check Module 按钮应报告 0 个违规。PyFlink 的 Python 支持flink-python模块同时需要 Java SDK 与 Python SDK而 IntelliJ IDEA 每个模块只支持配置一个 SDK。如果你要长期投入 PyFlink 开发官方建议把flink-python作为独立工程导入 PyCharm或单独的 IDEA 窗口。若只是偶尔处理 PyFlink例如运行 Python 测试可按下述方式在 IntelliJ 内配置按照官方文档 Configure a virtual environment 在 Flink 工程中创建 Virtualenv Python SDK。在 Project Explorer 中右键flink-python模块 → Open Module Settings或 Project Structure → Modules 找到该模块。将 Module SDK 切换为刚创建的 Virtualenv Python SDK。打开 flink-python/setup.py按 IntelliJ 提示安装依赖。完成后可运行flink-python下的 Python 测试来验证环境。IntelliJ 常见问题排查invalid flag: --add-exportsjava.base/sun.net.utilALL-UNNAMED原因激活了 java11 Maven Profile但使用的是较旧的 JDK。解决打开 View → Tool Windows → Maven取消勾选 java11 Profile然后重新导入工程。cannot find symbol: symbol: method defineClass(...) location: class sun.misc.Unsafe原因使用 JDK 11 编译一个尚不支持 Java 11 的旧版 Flink 1.9。解决打开 Project Structure → Project Settings → Project将 Project SDK 改为 JDK 8。切换回新版本 Flink 时需恢复此设置。package sun.misc does not exist原因使用 JDK 11 且通过--release选项交叉编译到 Java 8——该选项与 Flink 的构建配置不兼容。解决打开 Settings → Build, Execution, Deployment → Compiler → Java Compiler取消勾选 Use --release option for cross-compilation (Java 9 and later)。示例程序抛出 Flink 类的NoClassDefFoundError原因Flink 依赖被声明为 provided 作用域运行时不在 classpath 中。解决在运行配置中勾选 Include dependencies with Provided scope或者编写一个调用示例main()方法的测试类。EclipseFlink 目前不支持也不推荐使用 Eclipse 开发请改用 IntelliJ IDEA。PyCharm 开发 PyFlink若计划投入 PyFlink 开发官方推荐使用 PyCharm 作为flink-python模块的独立 IDE。以下指南基于 PyCharm 2019.1.3其他版本可能有细微差异。导入 flink-python 工程打开 PyCharm选择 File → Open。选择克隆仓库中的flink-python文件夹作为工程根目录。该目录内含 setup.py、tox.ini、pyflink/源码包与dev/开发辅助脚本。配置 Python 代码风格检查Flake8Flink 使用 Flake8 约束 Python 编码规范其配置位于 flink-python/tox.ini 的[flake8]段tox.ini 同时定义了py38~py311各版本的 Cython 测试环境。在 PyCharm 中将其接入外部工具为 Python 解释器安装 flake8pip install flake8。PyCharm 中打开 Settings → Tools → External Tools。点击 新建外部工具。Name 填 flake8。Description 填 Code Style Check。Program 填 Python 解释器路径例如/usr/bin/python。Arguments 填-m flake8 --configtox.ini。Working Directory 填$ProjectFileDir$。验证方式在 flink-python 工程中右键任意文件或文件夹运行 External Tools → flake8无违规输出即表示配置成功。小结一套可用的 Flink 源码开发环境可以归结为四个关键动作用 Maven 模式导入根工程并执行源码生成安装固定版本的 google-java-formatAOSP 风格与 Scala/scalafmt 支持以匹配根 pom.xml 的 Spotless 配置导入 tools/maven/checkstyle.xml 并关联suppressions.xml以通过静态检查对 PyFlink 采用独立的 PyCharm flake8 环境。遇到任何 IDE 疑难杂症时先回退到命令行mvn clean package -DskipTests与mvn spotless:apply验证通常能快速定位是工程问题还是 IDE 问题。赞分享大数据流处理批处理数据工程【免费下载链接】flink项目地址https://gitcode.com/gh_mirrors/fli/flink点击查看免费下载相关推荐Apache Flink 源码开发环境搭建指南将 Flink 导入 IntelliJ IDEA / PyCharm 并配置代码规范检查Apache Flink 源码开发环境搭建指南将 Flink 导入 IntelliJ IDEA / PyCharm 并配置代码规范检查 导读 本文基于 Apa大数据流处理批处理数据工程Apache Airflow 3 贡献者开发指南用 PyCharm / IntelliJ IDEA 搭建完整开发与调试环境Apache Airflow 3 贡献者开发指南用 PyCharm / IntelliJ IDEA 搭建完整开发与调试环境 本文面向希望在 JetBrains后端任务调度工作流自动化数据编排批处理数据工程流程编排GoReleaser 如何自动生成 ChangelogConventional Commits 深度解析GoReleaser 如何自动生成 ChangelogConventional Commits 深度解析 GoReleaser 是一款强大的开源 Go 项目发开发工具CI/CD构建工具上一篇Chalice 社区贡献指南从开发环境搭建到 PR 合入的完整工作流下一篇免费音频增强工具Equalizer APO从零开始的音质调校指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考