This document provides detailed instructions for setting up a development environment for Apache Flink.
For basic build instructions, see the README.md.
The sections below describe how to import the Flink project into an IDE for the development of Flink itself. For writing Flink programs, please refer to the Getting Started documentation.
Tip: Whenever something is not working in your IDE, try with the Maven command line first (
mvn clean package -DskipTests) as it might be your IDE that has a bug or is not properly set up.
To get started, please first checkout the Flink sources from one of our repositories, e.g.
git clone https://github.com/apache/flink.git
We keep a list of big refactoring commits in .git-blame-ignore-revs. When looking at change annotations using git blame it's helpful to ignore these. You can configure git and your IDE to do so using:
git config blame.ignoreRevsFile .git-blame-ignore-revs
The following guide has been written for IntelliJ IDEA 2021.2. Some details might differ in other versions. Please make sure to follow all steps accurately.
mvn clean package -DskipTests.Every file needs to include the Apache license as a header. This can be automated in IntelliJ by adding a Copyright profile:
Go to “Settings” → “Editor” → “Copyright” → “Copyright Profiles”.
Add a new profile and name it “Apache”.
Add the following text as the license text:
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.
Go to “Editor” → “Copyright” and choose the “Apache” profile as the default profile for this project.
Click “Apply”.
Go to “Settings” → “Plugins” and select the “Marketplace” tab. Search for the following plugins, install them, and restart the IDE if prompted:
You will also need to install the google-java-format plugin. However, a specific version of this plugin is required. Download google-java-format v1.24.0.0 and install it as follows. Make sure to never update this plugin.
Flink uses Spotless together with google-java-format to format the Java code. For Scala, it uses Spotless with scalafmt.
It is recommended to automatically format your code by applying the following settings:
For earlier IntelliJ IDEA versions:
.*\.java and .*\.scala to avoid formatting other file types.You can also format the whole project (both Java and Scala) via Maven by using mvn spotless:apply.
Checkstyle is used to enforce static coding guidelines.
Note: Some modules are not covered by Checkstyle, e.g. flink-core, flink-optimizer, and flink-runtime. Nevertheless, please make sure to conform to the checkstyle rules in these modules if you work in any of these modules.
tools/maven/checkstyle.xml located within your cloned repository.checkstyle.suppressions.file with the value suppressions.xml and click “Next”.You can now import the Checkstyle configuration for the Java code formatter.
tools/maven/checkstyle.xml located within your cloned repository.To verify the setup, click “View” → “Tool Windows” → “Checkstyle” and find the “Check Module” button in the opened tool window. It should report no violations.
Working on the flink-python module requires both a Java SDK and a Python SDK. However, IntelliJ IDEA only supports one configured SDK per module. If you intend to work actively on PyFlink, it is recommended to import the flink-python module as a separate project either in PyCharm or IntelliJ IDEA for working with Python.
If you only occasionally need to work on flink-python and would like to get Python to work in IntelliJ IDEA, e.g. to run Python tests, you can use the following guide.
flink-python/setup.py and install the dependencies when IntelliJ prompts you to do so.You can verify your setup by running some of the Python tests located in flink-python.
This section lists issues that developers have run into in the past when working with IntelliJ.
invalid flag: --add-exports=java.management/sun.management=ALL-UNNAMEDThis happens if the “java11” Maven profile is active, but an older JDK version is used. Go to “View” → “Tool Windows” → “Maven” and uncheck the “java11” profile. Afterwards, reimport the project.
cannot find symbol: symbol: method defineClass(...) location: class sun.misc.UnsafeThis happens if you are using JDK 11, but are working on a Flink version which doesn't yet support Java 11 (<= 1.9). Go to “Project Structure” → “Project Settings” → “Project” and select JDK 8 as the Project SDK.
When switching back to newer Flink versions you may have to revert this change again.
package sun.misc does not existThis happens if you are using JDK 11 and compile to Java 8 with the --release option. This option is currently incompatible with our build setup. Go to “Settings” → “Build, Execution, Deployment” → “Compiler” → “Java Compiler” and uncheck the “Use ‘--release’ option for cross-compilation (Java 9 and later)”.
NoClassDefFoundError for Flink classes.This happens if Flink dependencies are set to “provided”, resulting in them not being available on the classpath. You can either check “Include dependencies with ‘Provided’ scope” in your run configuration, or create a test that calls the main() method of the example.
Using Eclipse with Flink is currently not supported and discouraged. Please use IntelliJ IDEA instead.
If you intend to work on PyFlink, it is recommended to use PyCharm as a separate IDE for the flink-python module. The following guide has been written for 2019.1.3. Some details might differ in other versions.
Flake8 is used to enforce some coding guidelines.
pip install flake8./usr/bin/python.-m flake8 --config=tox.ini.$ProjectFileDir$.You can verify the setup by right-clicking on any file or folder in the flink-python project and running “External Tools” → “flake8”.