news 2026/9/8 17:53:44

3步跑出自建IntelliJ IDEA:一次讲透模块化IDE的构建机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3步跑出自建IntelliJ IDEA:一次讲透模块化IDE的构建机制

3步跑出自建IntelliJ IDEA:一次讲透模块化IDE的构建机制

【免费下载链接】intellij-communityIntelliJ IDEA & IntelliJ Platform项目地址: https://gitcode.com/GitHub_Trending/in/intellij-community

把自己手里用的IDE从源码构建出来,不只是极客行为——看懂 IntelliJ IDEA 源码如何把几百个模块拼成一个可运行的产品,你对模块化开发的理解会直接上一个台阶。接下来15分钟,你会从一条终端命令开始,跑到自己启动的 IDEA,并说清楚仓库里那些 .iml 文件在干什么。

30秒先拿到一个能跑的 IntelliJ IDEA

想先看结果,就记住这3行。这是 IDEA 源码构建的最短路径:克隆仓库,然后用项目自带的 Bazel 包装脚本直接启动"主"目标——

git clone https://gitcode.com/GitHub_Trending/in/intellij-community cd intellij-community ./bazel.cmd run //build:idea_community

第一次运行要下载大量工具链和依赖,耗时很长属正常。⚠️ 在第三行真正编译前,记得先执行一次./getPlugins.sh(下面逐步走时会展开)。

一条命令为什么能装出整个 IDE:.iml 到 Bazel 的生成链

先打个比方:把整个仓库想象成中央厨房。每个*.iml文件是一张"配方卡",写清一个模块需要哪些原料(源码目录、依赖);Bazel 是厨师,各目录下的BUILD.bazel是把配方翻译成的"工单"。关键在于工单是从配方生成的——仓库约定(见 AGENTS.md)里,.iml 才是 source of truth,BUILD.bazel 由它推导而来。

那 IDE 本身是什么?看根目录 BUILD.bazel 里的main规则:

jvm_library( name = "main", module_name = "intellij.idea.community.main", runtime_deps = [ "//platform/lang-api:lang", # 语言服务 "//java/openapi:java", # Java 语言支持 # ……一共挂着上百个模块依赖 ], )

runtime_deps就是一份"点单清单":清单上挂了哪个模块,IDE 就带哪块能力。所谓"模块化配置",本质上是往这份清单里加减名字。用 IDEA 打开仓库的入口是 .bazelproject 文件,README.md 要求装好 Bazel 插件,纯 IDE 内构建已不再支持。

从克隆到启动:4步流程完整走一遍

第一步:拉代码。就是开头前两条命令;不关心历史记录的话,clone 后加--depth 1可以省掉大量等待。

第二步:补上 Android 模块。Android 相关功能不在主仓库里,而在独立仓库中,跑项目自带的脚本即可取回:

./getPlugins.sh # Windows 用 getPlugins.bat

翻 getPlugins.sh 会发现它只有一行 git clone——为什么单独拉?因为两个仓库必须分支对齐,版本错配是后续编译报错的高发原因。

第三步:打开工作区。用 IDEA 开发就点 File | Open 直接选根目录的.bazelproject,让 IDE 通过 Bazel 读懂模块关系;不想进 IDE 的话,根目录跑bazel-build-all-community.cmd先编译全部目标也行。

第四步:启动。就是第一板块的第三行:

./bazel.cmd run //build:idea_community

//build:idea_community是 build/ 目录下的启动目标。首次编译通过后,拉起来的界面长这样:

从此你改任何代码,都能靠再次启动来验证,这就是"自建 IDE"的全部意义。

按自己的需求改:3个最常见的模块化配置

这一节挑你接触 IDEA 源码时最可能动手的三处,都按"改哪里→怎么改→怎么验证"来讲。

只打当前系统的安装包

改哪里:给 installers.cmd 传参数。怎么改

./installers.cmd -Dintellij.build.target.os=current

怎么验证:产物目录里只剩当前操作系统的安装包,其余平台被跳过。全部可选参数见 OpenSourceCommunityInstallersBuildTarget.kt。

给 IDE 增减一个模块

改哪里:根 BUILD.bazel 的runtime_deps清单。怎么改:按约定先改 .iml、再让构建脚本重新生成 Bazel 目标——修改对应模块的.iml(可参考根目录 intellij.idea.community.main.iml),然后运行build/jpsModelToBazelCommunityOnly.cmd重新生成,而不是手改 BUILD.bazel。

[!WARNING] 手改runtime_deps的顺序或内容容易和生成脚本打架,务必走"以 .iml 为准"的流程。

怎么验证bazel build //:main编译通过后启动,确认对应功能入口出现或消失。

换掉产品的外观信息

改哪里:community-resources/ 下的resources/目录。怎么改IdeaApplicationInfo.xml等产品信息与lafs/里的窗口框架图都在这里,由 community-resources/BUILD.bazel 打包进 IDE,替换资源后重新构建即可。怎么验证:启动后看关于页的产品名和窗口样式。

构建失败或启动不了?先查这4处

问题结论原因与处理
首次构建特别慢正常现象Bazel 在下载工具链与依赖,后续走缓存
IDEA 提示缺 Bazel 插件装插件IDE 纯构建已不支持,见 README.md
Android 模块编译不过两仓库分支错位用 git checkout 对齐分支后重跑 getPlugins.sh
Windows 克隆报路径过长Git 配置缺失git config --global core.longpaths true

想跑测试的话,按 README 的"Running IntelliJ IDEA in a CI/CD environment"一节用tests.cmd系列入口,参数用法都有说明。

IDE 本质是几百个模块的一份"点单清单",.iml 与 Bazel 是拼盘的那双手。下一步建议你跑一次installers.cmd,亲手产出一个安装包,完整体验模块到成品的最后一公里。

【免费下载链接】intellij-communityIntelliJ IDEA & IntelliJ Platform项目地址: https://gitcode.com/GitHub_Trending/in/intellij-community

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 17:52:35

KV Cache优化全解析:从GQA/MLA到PagedAttention与KV量化

做LLM服务化部署的人,几乎都会遇到同一个怪现象:一个小模型本身没多大,可一旦并发和上下文长度上来,GPU显存就像漏了一样。我自己最早部署7B模型时也踩过这个坑。FP16权重大概14GB,结果输入输出写长一点,加…

作者头像 李华
网站建设 2026/9/8 17:52:08

易语言前端+PHP后端:MuX云切片转码系统源码剖析与实战部署

简介:MuX云切片转码系统源码是2023年的完整项目,前端为易语言配合EXUI插件实现的全新界面,后端为PHP代码且全开源、无加密,便于二次开发。系统主要面向需要搭建视频切片转码平台、实现TS图床加密播放以及对接支付宝当面付的开发者…

作者头像 李华
网站建设 2026/9/8 17:52:00

Kotlin + 无障碍服务打造老人极简桌面:一键视频通话实战

去年国庆回老家,我发现爷爷的手机桌面乱得可怕。壁纸是他孙女的照片,但上面叠了一层又一层购物推送、直播入口和“清理加速”的小红点。他不敢乱点,又总误触,每次想把屏幕调回拨号界面都要找半天。更扎心的是,他儿子在…

作者头像 李华
网站建设 2026/9/8 17:50:28

爱享素材下载器傻瓜级指南:3步免费抓取视频号抖音视频

爱享素材下载器傻瓜级指南:3步免费抓取视频号抖音视频 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 爱享素材下…

作者头像 李华
网站建设 2026/9/8 17:47:24

ARM官方MCU关键词识别项目ML-KWS-for-MCU源码深度评测

干嵌入式语音交互这一行的人,多多少少都会碰到一个绕不开的名字:ML-KWS-for-MCU。这是 ARM 官方放出来的一个面向微控制器的关键词识别(Keyword Spotting,KWS)参考实现,整个项目的训练、模型转换、量化、部…

作者头像 李华