| --- |
| title: FE Development Environment Setup - IntelliJ IDEA |
| language: en |
| description: Set up the Apache Doris FE development and debugging environment with IntelliJ IDEA, covering Linux, macOS, and Windows. |
| keywords: |
| - IntelliJ IDEA |
| - Apache Doris FE |
| - FE development environment |
| - FE debugging |
| - Thrift |
| - generated-source |
| --- |
| |
| <!-- |
| 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. |
| --> |
| |
| # Setting Up the FE Development Environment with IntelliJ IDEA |
| |
| This document describes how to set up the Doris FE (Frontend) development and debugging environment with IntelliJ IDEA on Linux, macOS, and Windows. |
| |
| <!-- Knowledge type: Procedure --> |
| <!-- Applies to: IDE configuration / Debugging setup --> |
| |
| ## 1. Environment Preparation |
| |
| Requirements: JDK 1.8+, IntelliJ IDEA. |
| |
| ### 1.1 Pull the Source Code |
| |
| Download the Doris source code from GitHub to your local machine: |
| |
| ```bash |
| git clone https://github.com/apache/doris.git |
| ``` |
| |
| :::tip Note for macOS users |
| **When opening the project with IDEA, it is recommended to open the `fe` subdirectory under the source tree directly rather than the entire Doris repository root.** This avoids later conflicts with CLion (which opens the `be` directory). |
| ::: |
| |
| ### 1.2 Install Thrift |
| |
| If you are only doing FE development and have not built the full `thirdparty`, you need to install Thrift separately and copy or symlink it into the `thirdparty/installed/bin` directory. |
| |
| | Doris version | Matching Thrift version | |
| | ------------- | ----------------------- | |
| | 0.15 ~ 1.2 | 0.13.0 | |
| | 1.2+ | 0.16.0 | |
| |
| The following uses 0.16.0 as an example; 0.13.0 follows the same procedure. |
| |
| #### macOS |
| |
| ```bash |
| brew tap homebrew/core --force |
| brew tap-new $USER/local-tap |
| brew extract --version='0.16.0' thrift $USER/local-tap |
| brew install thrift@0.16.0 |
| ``` |
| |
| If the download fails, you can edit: |
| |
| `/usr/local/Homebrew/Library/Taps/$USER/homebrew-local-tap/Formula/thrift@0.16.0.rb` |
| |
| Change: |
| |
| `url "https://www.apache.org/dyn/closer.lua?path=thrift/0.16.0/thrift-0.16.0.tar.gz"` |
| |
| to: |
| |
| `url "https://archive.apache.org/dist/thrift/0.16.0/thrift-0.16.0.tar.gz"` |
| |
| Reference: <https://gist.github.com/tonydeng/02e571f273d6cce4230dc8d5f394493c> |
| |
| #### Linux |
| |
| ```bash |
| wget https://archive.apache.org/dist/thrift/0.16.0/thrift-0.16.0.tar.gz |
| yum install -y autoconf automake libtool cmake ncurses-devel openssl-devel lzo-devel zlib-devel gcc gcc-c++ |
| tar zxvf thrift-0.16.0.tar.gz |
| cd thrift-0.16.0 |
| ./configure --without-tests |
| make |
| make install |
| ``` |
| |
| After installation, check the version: |
| |
| ```bash |
| thrift --version |
| ``` |
| |
| #### Windows |
| |
| 1. Download: <http://archive.apache.org/dist/thrift/0.16.0/thrift-0.16.0.exe> |
| 2. Copy it to `./thirdparty/installed/bin` |
| |
| > If you have already built Doris in full, you do not need to install Thrift again. You can reuse `$DORIS_HOME/thirdparty/installed/bin/thrift` directly. |
| |
| ## 2. Generate Code |
| |
| ### Linux / macOS |
| |
| Run the following in the source root directory: |
| |
| ```bash |
| sh generated-source.sh |
| ``` |
| |
| Wait until `Done` is displayed. |
| |
| > Versions 1.2 and earlier use `cd fe && mvn generate-sources`. If an error occurs, run `cd fe && mvn clean install -DskipTests`. |
| |
| You can also run the corresponding Maven command from the IDEA UI: |
| |
|  |
| |
| ### Windows |
| |
| On Windows, you may not be able to run `make` or shell scripts. Use one of the following approaches: |
| |
| - Copy the generated `fe/fe-core/target/generated-sources` directory from a Linux machine to the corresponding location on Windows. |
| - Mount the local directory with Docker and generate the auto-generated code inside Docker (see [Compile from source](../source-install/compilation-with-docker)). |
| |
| ## 3. Generate the Help Documentation |
| |
| If you have not generated the Help documentation yet, run: |
| |
| ```bash |
| cd doris/docs |
| sh build_help_zip.sh |
| cp build/help-resource.zip ../fe/fe-core/target/classes |
| ``` |
| |
| ## 4. Configure Debugging in IDEA |
| |
| ### 4.1 Import the Project |
| |
| Import the `fe` project with IDEA. |
| |
| ### 4.2 Prepare the Directories |
| |
| Create the directories required for debugging under the `fe` directory (in newer versions this directory may already exist): |
| |
|  |
| |
| ### 4.3 Build the UI (Optional) |
| |
| Build the `ui` project and copy the files from the `ui/dist/` directory into `webroot`. You can skip this step if you do not need to view the Doris UI. |
| |
| ### 4.4 Configure fe.conf |
| |
| The following is a reference `conf/fe.conf` configuration that you can adjust as needed: |
| |
| ```bash |
| LOG_DIR = ${DORIS_HOME}/log |
| |
| DATE = `date +%Y%m%d-%H%M%S` |
| JAVA_OPTS="-Xmx2048m -XX:+UseMembar -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xloggc:$DORIS_HOME/log/fe.gc.log.$DATE" |
| |
| # For jdk 9+, this JAVA_OPTS will be used as default JVM options |
| JAVA_OPTS_FOR_JDK_9="-Xmx4096m -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:$DORIS_HOME/log/fe.gc.log.$DATE:time" |
| |
| sys_log_level = INFO |
| |
| http_port = 8030 |
| rpc_port = 9020 |
| query_port = 9030 |
| arrow_flight_sql_port = -1 |
| edit_log_port = 9010 |
| |
| # priority_networks = 10.10.10.0/24;192.168.0.0/16 |
| ``` |
| |
| :::tip Running BE in Docker on macOS |
| If you run BE on macOS through Docker for Mac, since `docker for Mac` does not support Host mode, you need to expose BE ports with `-p`. In addition, `priority_networks` in `fe.conf` must be set to an IP reachable from inside the container (for example, the Wi-Fi IP). |
| ::: |
| |
| ### 4.5 Set the IDEA Run Environment Variables |
| |
| Set the run environment variables in IDEA: |
| |
|  |
| |
| <!-- Knowledge type: Configuration parameters --> |
| |
| Reference configuration on macOS (the `DORIS_HOME` environment variable points to the Doris runtime directory you copied out): |
| |
| | Environment variable | Example value | Description | |
| | -------------------- | ----------------------------- | ------------------------------------------ | |
| | `JAVA_OPTS` | `-Xmx8092m` | JVM heap parameters | |
| | `LOG_DIR` | `~/DorisDev/doris-run/fe/log` | FE log directory | |
| | `PID_DIR` | `~/DorisDev/doris-run/fe/log` | PID file directory | |
| | `DORIS_HOME` | `~/DorisDev/doris-run/fe` | FE runtime directory (not the source dir) | |
| |
| ```bash |
| JAVA_OPTS=-Xmx8092m |
| LOG_DIR=~/DorisDev/doris-run/fe/log |
| PID_DIR=~/DorisDev/doris-run/fe/log |
| DORIS_HOME=~/DorisDev/doris-run/fe |
| ``` |
| |
|  |
| |
| ### 4.6 Configure Modify options |
| |
| Because some dependencies are scoped as `provided`, IDEA needs a special setting: in `Run/Debug Configurations`, click `Modify options` on the right and check `Add dependencies with "provided" scope to classpath`. |
| |
|  |
| |
| ## 5. Start FE |
| |
| Click `Run` or `Debug`. IDEA starts compiling, and FE starts up once compilation finishes. |
| |
|  |
| |
| You can now begin FE development and debugging. |
| |
| ## 6. Frequently Asked Questions (FAQ) |
| |
| <!-- Knowledge type: Troubleshooting --> |
| |
| ### Q1: Startup throws `ClassNotFoundException` or some dependencies cannot be found |
| |
| `Add dependencies with "provided" scope to classpath` was not checked in `Run/Debug Configurations`. See [Section 4.6](#46-configure-modify-options) to resolve. |
| |
| ### Q2: `generated-source.sh` reports thrift version mismatch |
| |
| The version of `thirdparty/installed/bin/thrift` does not match your Doris version. Reinstall according to the version mapping table in [Section 1.2](#12-install-thrift). |
| |
| ### Q3: FE cannot be accessed by BE or clients after startup |
| |
| Check whether `priority_networks` in `fe.conf` is set to a subnet reachable from the local machine or container. For the macOS + Docker BE case, see the tip in Section 4.4. |