跳到主要内容
  1. Blog/

Jetbrains 缓存清理与安装优化

··字数 3708·8 分钟
有悟方法

jetbrains 是非常流行的收费商业ide,有一系列受欢迎的热门产品,如 pycharmwebstormgoland ,idea 等。这些产品在升级时,会根据版本变化,可能会产生新的缓存文件存储目录,如果没有手工清理,这些文件会永久的遗留在电脑上,占用空间。 另外,每个安装程序都带有 jre java运行时,如果同时安装了多个产品,可以手动精简,留存一个副本即可。本文分享站长清理的办法。

jetbrains 这些热门 ide,如 pycharmwebstormgoland ,idea 在操作系统上安装后的文件结构非常一致,并且升级频繁。在升级中版本以上时,会生成新版本的缓存文件目录,而旧版本临时文件就这样被遗留在电脑上。

缓存目录 #

jetbrains 系列产品的缓存目录分为两类:
配置文件目录
保存诸如快捷键、颜色主题、30天试用授权证书、自定义 jbr 运行时参数等等的 ide 用户配置信息,所以不能随意删除。删除后会重置程序初始安装状态。
临时文件目录
可以随意删除,其中包含缓存、本地文件修改修改、用于工程加速的 index 文件,这些文件的用途在于优化 ide 的速度,删除后ide 会根据需要重建的。
日志文件目录
保存 ide 运行的java日志、产品升级日志以及保存用于故障诊断信息的文件,体积比较小,就几 M而已。

配置文件目录 #

jetbrains产品名年份.版本号 的格式来命名配置文件目录。如 pycharm 2021.1 的配置文件目录名称为 PyCharm2021.1。如果是 pycharm 2021.2版本,则对应的配置文件目录名称为 PyCharm2021.2。在不同的操作系统平台下,分别存放在以下用户目录下:

  • windows:%userprofile%/AppData/Roaming/JetBrains
  • macos: ~/Library/ApplicationSupport/JetBrains
  • linux: ~/.config/JetBrains

产生升级后,如 2021.1 升级到 2021.2,会生成新的对应目录,在升级成功后可以删除旧版本目录。

临时文件目录 #

与配置文件目录类似,具有相同的目录命名规则与固定的存储位置。

  • windows: %userprofile%/AppData/Local/JetBrains
  • macos: ~/Library/Caches/JetBrains
  • linux: ~/.cache/JetBrains/

同样,删除掉旧版本的目录即可。

日志文件目录 #

经过比较,日志文件的路径规则与配置文件目录、临时文件目录稍有不同:

  • windows: 在临时文件目录下的 log,如 %userprofile%/AppData/Local/JetBrains/WebStrom2021.1/log
  • macos: ~/Library/Caches/JetBrains,因体积不大,不需要关注,只是在卸载时,记得手工删除。

绿色安装 jetbrains #

在 macos平台上的安装过程就是绿色的,无须讨论。

在解决过期 license 时发现,有网友反映需要清理注册表的信息,有悟才知道 jetbrains 产品在 windwos 上安装时会写注册表。之前,有悟一直都是使用绿色安装的方法,因此没有注意到这个现象。

使用 7z 可以完美解压 jetbrains 系列的产品安装文件。

如果你在 windows 安装了带 GUI 的 7z ,那么可以在右键菜单中直接解压

使用 7z 解压
使用 7z 解压

如果你安装的是 7z 命令行,(如通过 scoop 安装),那么可以通过命令解压安装文件。

> 7z x  WebStrom-2021.2.1.exe -owebstorm-2021

上面的 WebStrom-2021.2.1.exe 是从官网下载的安装文件,-owebstorm-2021是让7z 把解压出来的文件放到目录webstorm-2021中。 本文最后有一段《jetbrains 安装程序下载脚本》,可以使用 shell 来帮助下载安装文件。

一个自带了 java 运行时的windows 桌面程序,用什么注册表呢!

安装多个产品时精简jre #

随jetbrains 系列产品自带的 java 运行时是 jetbrains 针对openJDK 中字体渲染的修改版本,文件夹名称叫 jbr,不是 jre

它随产品一起发布,也可以自己下载, confluence.jetbrains.com 或者 github.com/JetBrains/JetBrainsRuntime

此 jbr 运行时为了启动 ide 程序的,不是用来开发 java 程序的 sdk。当然你从上面的 JetBrainsRuntime 下载链接中看到的 jbrsdk,是可以用来当 java sdk 的,它本身就是从 openjdk 修改过来的。

有悟自己就使用 jbrsdk 来做为 java 11的开发 sdk,同时又拿它作为 jbr。

如何精简这个运行时呢。在 2020 版本以后,发现同版本号的产品使用的 java 运行时 jbr 是相同的。比如 pycharm 2021.1webstorm 2021.1jbr 相同,高版本的支持低版本。那么可以将一份 jbr 移到程序安装目录以外,然后在程序安装目录中通过目录链接的方式来使用 jbr。这样多个 jetbrains 产品就共享了一份 jbr

  • windows:
# 假设程序安装在 d:
> cd d:\pycharm2021.1
> mv jbr ..
> mklink /j jbr ..\jbr
  • macos:
# 假设程序安装在 /Applications/PyCharm.app
> cd /Applications/PyCharm.app/Contents
> mv jbr ../..
> ln -s ../../jbr jbr

如果同时安装了 pycharmwebstormideagoland,把安装目录下的 jbr 删除后通过 mklink 或者 ln 创建一个 jbr 链接,链接到一个已经存在的 jbr 即可。

对于笔记本电脑较为吃紧的硬盘空间来说,这样可以节省不少。一个 jbr 大致 200M,大概在2021版本后,jbr 中带了谷歌浏览器内核(Chromium Embedded Framework),这个 jbr 的大小已经到达 320M 了。

jbr文件大小
jbr文件大小
jbr占用系统空间
jbr占用系统空间

精简 jbr 之后会带来一些问题 #

jetbrains 系列产品所自带的 java 运行时,是 jetbrains 根据自身需要的openJDK 修改版,与 java 官方发布的并不一样。jetbrains 发布的运行时更新还是比较频繁,这些更新会随产品的升级一起推送。

如果你经常通过 idea/pycharm/goland/webstorm 更新版本,使用上面的方法有时会出现问题。如果在某次升级中,包含了 jbr 版本更新,这时 jbr 的更新补丁会随官方的更新包一起推送并更新。

经过有悟多次试验,若更新中包含 jbr补丁,较常出现更新后无法启动,应该是 jbr 受破坏了;而有时升级程序会自我检测,会出现这样的冲突提示而无法正常更新。 若 jbr 是从某个产品上提取出来的,如 pycharm,那么在 jbr 无升级情况下,pycharm 的版本升级是可以通过自身的升级程序来完成的。因 jbr 的升级检测问题,为了避免操作过于复杂,请用重新下载新版本再精简 jbr 的方法来升级。当前一般情况下,下载新版本程序包来升级,比自带的升级程序来升级速度更快。

本文最后,有一段辅助 shell 脚本 《jetbrains 安装程序下载脚本》,可以用来下载官方的安装程序。

➜  ./jbr/Contents/Home/bin/java --version
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment JBR-11.0.11.9-1341.60-jcef (build 11.0.11+9-b1341.60)
OpenJDK 64-Bit Server VM JBR-11.0.11.9-1341.60-jcef (build 11.0.11+9-b1341.60, mixed mode)

有悟使用的 jbr 版本 JBR-11.0.11.9-1341.60-jcef,将 webstorm 2021.1.2 升级到 webstorm 2021.1.3 时,出现如下图所示的冲突提示,以为是 jbr 版本又升级了,上官网下载最新的 webstorm 2021.1.3,结果其中的 jbr 也是JBR-11.0.11.9-1341.60-jcef,这就搞不懂了。

jbr版本一致的情况下还提示冲突
jbr版本一致的情况下还提示冲突

有悟不知道 jetbrains 更新过程的内部细节,也不知道 jbr 随产升级的自我检测机制,若出现这种情况,目前无法简单解决来绕开更新过程中的检测,只能到官方下载最新版本的安装文件,按上面步骤重新链接 jbr。

使用外置 jbr 或者 jbrsdk,会导致无法通过自带的更新功能来升级版本。所以如果有版本升级的,需要从官方网站下载新版本。如果你的网速足够快,比如100M 的电信光纤,通过下载新版本的方式反而比通过更新功能升级的方式还要快捷。

jetbrains 安装程序下载脚本 #

下面这段脚本,可在升级 jetbrains 产品时,下载 jetbrains 产品安装程序,这样就无须登录到 jetbrains 官方网站下载。脚本使用 githut gist 来维护管理, gist 地址

脚本中使用到了 shwget,如果是 windows 用户,若你已经安装 git-for-windows,它附带了 bash 和 wget ,把脚本保存到本地,如 jetbrains.sh,然后执行。

脚本执行时判断输入的产品名称,与当前操作系统平台,拼接成下载链接后使用 wget 下载安装程序。若脚本无法正确判断 macos、windows、linux,请自行修改。(仅在 macos 平台测试过。)

#!/bin/bash

products="goland|pycharm|webstorm|idea|appcode|rider|clion"

_app=$1
_ver=$2
[[ "$(echo $_app | tr '[:upper:]' '[:lower:]')" =~ ^($products)$ ]] || {
 echo "Invalid. Only one of (goland, pycharm, webstorm, idea, appcode, rider, clion)." ;
 echo "usage: jetbrains.sh pycharm 2021.2.2 or jetbrains.sh pycharm" 

 exit 1 ; 
}

# idea
# https://data.services.jetbrains.com/products/download?code=IU&platform=mac
# redirect -> e.g. https://download.jetbrains.com.cn/idea/ideaIU-2021.2.2.dmg

# webstorm
# https://data.services.jetbrains.com/products/download?code=WS&platform=mac
# redirect -> e.g. https://download.jetbrains.com/webstorm/WebStorm-2021.2.2.dmg


# pycharm
# https://data.services.jetbrains.com/products/download?code=PCP&platform=mac
# redirect -> e.g. https://download.jetbrains.com/python/pycharm-professional-2021.2.2.dmg

# goland
# https://data.services.jetbrains.com/products/download?code=GO&platform=mac
# redirect -> e.g. https://download.jetbrains.com.cn/go/goland-2021.2.3.dmg

# appcode
# https://data.services.jetbrains.com/products/download?code=ac&platform=mac
# redirect -> e.g. https://download.jetbrains.com/objc/AppCode-2021.2.2.dmg

# clion
# https://data.services.jetbrains.com/products/download?code=CL&platform=mac
# redirect -> e.g. https://download.jetbrains.com/cpp/CLion-2021.2.1.dmg

# rider
# https://data.services.jetbrains.com/products/download?code=RD&platform=mac
# redirect -> e.g. https://download.jetbrains.com/rider/JetBrains.Rider-2021.2.1.dmg

# platform
# * windows: exe
# * windowsZip: zip
# * mac: dmg
# * macM1: -aarch64.dmg
# * linux: tar.gz

# 
_product="$_app"
_os=`uname`
_plat="mac"
_type=""

# 通过https://data.services.jetbrains.com/products/download?code=XX&platform=mac
# 下载最新版本
[[ -z "$_ver" ]] && {
    # echo "version#, like 2021.2.2"; exit 1;

    echo "get the lastest version of $_product"

    case "$_product" in
        "idea" )
            _product="IU"   ;;
        "goland" )
            _product="GO" ;;
        "pycharm" )
            _product="PCP" ;;
        "webstorm" )
            _product="WS" ;;
        "appcode" )
            _product="ac" ;;
        "rider" )
            _product="rd" ;;
        "clion" )
            _product="cl" ;;
    esac

    case $_os in
        "Darwin" ) _plat="mac" ;;
        "Linux" ) _plat="linux" ;;
         # windows 这个有问题
        "windows" ) _plat="windows" ;;
        * ) _plat="windows" ;;
    esac

    _url="https://data.services.jetbrains.com/products/download?code=$_product&platform=$_plat"

    wget --content-disposition "$_url"

} || {
    # 下载指定版本
    # e.g. https://download.jetbrains.com.cn/idea/ideaIU-2021.2.2.dmg

    case "$_product" in
        "idea" )
            _product="idea/ideaIU"   ;;
        "goland" )
            _product="go/goland" ;;
        "pycharm" )
            _product="python/pycharm-professional"
            ;;
        "webstorm" )
            _product="webstorm/WebStorm"
            ;;
        "appcode" )
            _product="objc/AppCode"
            ;;
        "rider" )
            _product="rider/JetBrains.Rider"
            ;;
        "clion" )
            _product="cpp/CLion"
            ;;
    esac

    case $_os in
        "Darwin" )
         _type="dmg"  ;;
        "Linux" )
         _type="tar.gz" ;; 
         # windows 这个有问题
        "windows" )
         _type="exe" ;;
        * )
         _type="exe" ;
    esac

    _url="https://download.jetbrains.com.cn/$_product-$_ver.$_type"

    wget "$_url"

}
➜ sh ./jetbrains.sh jetbrains webstorm
get the lastest version of webstorm
--2021-10-16 18:16:40--  https://data.services.jetbrains.com/products/download?code=WS&platform=mac
正在解析主机 data.services.jetbrains.com (data.services.jetbrains.com)... 54.151.137.161, 3.1.247.170
正在连接 data.services.jetbrains.com (data.services.jetbrains.com)|54.151.137.161|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 302
位置:https://download.jetbrains.com/webstorm/WebStorm-2021.2.2.dmg [跟随至新的 URL]
--2021-10-16 18:16:41--  https://download.jetbrains.com/webstorm/WebStorm-2021.2.2.dmg
正在解析主机 download.jetbrains.com (download.jetbrains.com)... 52.30.174.243, 52.50.241.213
正在连接 download.jetbrains.com (download.jetbrains.com)|52.30.174.243|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 302 Moved Temporarily
位置:https://redirector.jetbrains.com.cn/webstorm/WebStorm-2021.2.2.dmg [跟随至新的 URL]
--2021-10-16 18:16:44--  https://redirector.jetbrains.com.cn/webstorm/WebStorm-2021.2.2.dmg
正在解析主机 redirector.jetbrains.com.cn (redirector.jetbrains.com.cn)... 54.223.84.66, 54.222.155.141
正在连接 redirector.jetbrains.com.cn (redirector.jetbrains.com.cn)|54.223.84.66|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 301 Moved Permanently
位置:https://download.jetbrains.com.cn/webstorm/WebStorm-2021.2.2.dmg [跟随至新的 URL]
--2021-10-16 18:16:44--  https://download.jetbrains.com.cn/webstorm/WebStorm-2021.2.2.dmg
正在解析主机 download.jetbrains.com.cn (download.jetbrains.com.cn)... 119.147.182.26, 119.147.182.6, 119.147.182.16, ...
正在连接 download.jetbrains.com.cn (download.jetbrains.com.cn)|119.147.182.26|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:495621903 (473M) [binary/octet-stream]
正在保存至: “WebStorm-2021.2.2.dmg”