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 truthBUILD.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.oscurrent怎么验证产物目录里只剩当前操作系统的安装包其余平台被跳过。全部可选参数见 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.mdAndroid 模块编译不过两仓库分支错位用 git checkout 对齐分支后重跑 getPlugins.shWindows 克隆报路径过长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),仅供参考