Skip to main content

IntelliJ IDEA Community Edition 源码构建记录

·176 words·1 min
IHEXON
Author
IHEXON
Do You Hear the People Sing ?

你可能不知道的是 IntelliJ IDEA 社区版是开源的,其源代码托管在 https://git.jetbrains.org 中。

IntelliJ 平台简介
#

你可能不知道的是 IntelliJ IDEA 社区版是开源的,其源代码托管在 https://git.jetbrains.org 中。

仓库 https://github.com/JetBrains/intellij-community/https://git.jetbrains.org 保持同步,但可能会有延迟。

准确来说 IntelliJ 是一个开源的 IDE 平台,IntelliJ IDEA 等 JetBrains 产品基于IntelliJ 平台开发。Google 的 Android Studio也是基于IntelliJ 平台开发的,从Android Studio的界面看就知道。

IntelliJ 平台提一个 现代 IDE所需要的基础架构组件 。比如创建工具窗口、树视图和列表,快速搜索,全文编辑器,语法突出显示、代码折叠、代码补全等抽象实现。

文档地址:https://plugins.jetbrains.com/docs/intellij/intellij-platform.html

从源码构建 IntelliJ IDEA Community Edition
#

首先克隆源码:

$ git clone git://git.jetbrains.org/idea/community.git --depth 1

💡 如果不添加 --depth 1 将会克隆全部提交记录,体积会非常大。这里需要说明的一点是git.jetbrains.org在国内非常慢,直连大概 10kb/s,而git:// 协议不支持从 http_proxy 读取代理配置,需要使用 proxychains 强制 git 走代理。

💡 Master 分支可能无法成功构建。

Jetbrains 内部 CI 应该会不定时进行构建测试,但哪次提交构建成功或者失败我就不太清楚了。所以Master 分支能不能成功构建全看运气。我写了一个脚本,会自动构建 IntelliJ IDEA Community Edition 并记录构建成功的 commit tree供大家参考。

我感觉 IntelliJ 平台虽然是开源的,但类似于一种大家都知道大家都在用,但一般不会给它贡献代码的情况。 IntelliJ 平台的代码提交者基本是在 Jetbrains 内部工作的大佬。

在 windows 平台上需要对 git 客户端配置两个参数

git config --global core.longpaths true

git config --global core.autocrlf input

IntelliJ IDEA 社区版需要独立的 Android 模块,在源码根目录克隆Android 模块目录:

git clone git://git.jetbrains.org/idea/android.git android --depth 1

Android 模块的 Master 分支同样可能无法成功构建,全靠运气。

运行 installers.cmd 进行源码构建:

$ ./installers.cmd -Dintellij.build.dev.mode=false
-Dintellij.build.target.os=current

增量构建需要添加 -Dintellij.build.incremental.compilation=true 参数,增量构建可以减少构建时间。

遇到的问题
#

/tmp 不能为软链接,否则在 jps-bootstrap 时会失败。 如果你的Linux 发行版的 /tmp 目录为软链接,需要为JVM添加参数:

$ export _JAVA_OPTIONS="-Djava.io.tmpdir=/var/tmp"

后话
#

构建 IntelliJ 平台需要的内存非常大,8G内存可能会不够,在构建的时候会直接爆炸。

如果是调试 IntelliJ 平台。最低要 16G 内存,不然会卡成 PPT。

如果我就是穷怎么办?

如果是单纯构建 IntelliJ 平台,可以通过 SWAP (ZSWAP或者ZRAM)来弥补内存不足的情况。

我这里的情况是用一台机顶盒作为 AutoBuild 服务器,内存只有 4G,但通过 ZRAM 可以扩展出 11G的SWAP内存,我一开始觉得这样操作算作弊。但实测确实可以成功构建IDEA 社区版,但就是非常非常慢,因为eMMC的 IO 读写慢,DDR 内存 IO 慢,造成了虽然能构建,但构建一次需要4个小时。

但作为 AutoBuild 服务器,4小时构建时长就不是问题,因为我本打算就一天构建2次。多次重复构建没有实际意义还不环保:)