SR簡介
StarRocks 是一款高性能分析型數據庫,支持實時、多維度、高并發的數據分析。本指南旨在解決在使用 VSCode 或 Cursor 開發 StarRocks 后端項目時遇到的模塊識別問題。
問題描述
使用 Cursor 或 VSCode 打開 StarRocks 的后端工程 fe 時,spark-dpp
和 fe-core
模塊沒有被正確識別為 Java 工程,而其它 3 個模塊(plugin-common
、fe-common
和 hive-udf
)可以正常識別。這會導致代碼導航、自動補全等功能無法正常使用。
StarRocks FE 工程結構說明
StarRocks FE(Frontend)是 StarRocks 的前端服務組件,負責元數據管理、查詢規劃和優化等功能。它包括以下 5 個模塊:
<modules><module>plugin-common</module> <!-- 插件通用模塊 --><module>fe-common</module> <!-- 前端通用模塊 --><module>spark-dpp</module> <!-- Spark數據預處理模塊 --><module>fe-core</module> <!-- 前端核心模塊 --><module>hive-udf</module> <!-- Hive用戶自定義函數模塊 -->
</modules>
使用 Cursor/VSCode 打開前的準備工作
在使用 Cursor 或 VSCode 打開 StarRocks FE 項目前,需要完成以下準備工作:
1. 環境準備
確保您的開發環境滿足以下要求:
- JDK 17(StarRocks 3.4.0+ 版本要求)
- Maven 3.6+
- Python 3.x
- Thrift 編譯器
2. 生成源代碼
按照官方指導,需要先完成以下步驟:
# 進入 fe 目錄
cd starrocks/fe# 編譯生成源代碼
mvn clean install -DskipTests=true
這一步會在 fe-core
模塊的 target 目錄生成源代碼,包括 Thrift 和 Protobuf 生成的代碼。
3. 常見問題及解決方法
在執行 Maven 構建過程中,可能會遇到以下問題:
3.1 找不到 Thrift 編譯器
如果報錯找不到 thrift,需要安裝 thrift 編譯器:
# Ubuntu/Debian
sudo apt install thrift-compiler# CentOS/RHEL
sudo yum install thrift
3.2 Python 相關問題
確保已安裝 Python,并在 Cursor 的 terminal (如果在 Cursor 的 terminal 運行 mvn,因 Cursor 的默認設置有問題)中運行 Maven 命令時清理環境變量:
# 清理 Python 相關環境變量
unset PYTHONHOME
unset PYTHONPATH
3.3 Java 版本問題
StarRocks FE 3.4.0+ 版本需要使用 Java 17:
# 設置 Java 環境變量
export JAVA_HOME=/path/to/java17
export PATH=$JAVA_HOME/bin:$PATH
問題解決方案
為了讓 Cursor/VSCode 正確識別 spark-dpp
和 fe-core
模塊,我們可以使用 Maven Eclipse 插件生成 Eclipse 項目配置文件(.project
和 .classpath
),這些文件可以輔助 Cursor/VSCode 的 Java 擴展正確識別 Java 工程結構。
生成 Eclipse 配置文件
執行以下命令為 spark-dpp
和 fe-core
模塊生成 Eclipse 配置:
mvn eclipse:clean eclipse:eclipse -pl spark-dpp,fe-core
注意:
- 運行時間可能較長,請耐心等待
- 如果 Java 語言服務器 (kvjs) 報 JTS 的 OOM 錯誤,需要在
fe/.vscode/settings.json
文件中增加以下配置:"java.jdt.ls.vmargs": "-XX:+UseG1GC -Dsun.zip.disableMemoryMapping=true -Xmx4G -Xms512m -Xlog:disable"
- 使用eclipse插件完成后,檢查生成的fe-core/.classpath文件,需要包括以下所有源代碼,如果不全,可修改修改文件添加
<classpathentry including="**/*.java" kind="src" output="target/test-classes" path="src/test/java"/><classpathentry excluding="**/*.java" kind="src" output="target/test-classes" path="src/test/resources"/><classpathentry including="**/*.java" kind="src" path="src/main/java"/><classpathentry including="**/*.java" kind="src" path="target/generated-sources/thrift"/><classpathentry including="**/*.java" kind="src" path="target/generated-sources/antlr4/com/starrocks/sql/parser"/><classpathentry including="**/*.java" kind="src" path="target/generated-sources/proto"/><classpathentry including="**/*.java" kind="src" path="target/generated-sources/build"/>
- 使用ctrl+shift+p打開Java: Open Project Settings,修改fe-core模塊的一些信息,apply
- 每次修改都要重新打開一下工程,直接打開starrocks/fe這個父目錄
補充說明
使用 IntelliJ IDEA 的替代方案
如果您更習慣使用 IntelliJ IDEA,可以直接打開 fe 文件夾,IDEA 會正常識別各個模塊。但需要注意:
- 加載過程中 IDEA 可能會報 OOM 錯誤,可以通過增加 IDEA 的內存配置解決:
參見另外一篇博客
Docker 開發環境
如果您希望使用 Docker 進行 StarRocks 開發,可以參考以下資源:
- StarRocks-Docker-Dev:一鍵式 StarRocks Docker 開發環境
- StarRocks/docker:官方 Docker 開發環境構建工具
注意事項
- 確保
pom.xml
文件正確配置 - 確保 Java 環境變量正確設置
- 確保 Maven 的
settings.xml
正確配置 - 模塊名要使用 pom.xml 中定義的
<artifactId>
- 生成的 Eclipse 配置文件不應提交到版本控制系統中
相關資源
- StarRocks 官方文檔
- StarRocks GitHub 倉庫
- StarRocks 社區論壇
- StarRocks Slack 頻道