Ubuntu 上 Gradle 版本太舊的問題

從「Ubuntu – Package Search Results -- gradle」或是「gradle package : Ubuntu」這邊可以看到 Ubuntu 上的 Gradle 舊到不行,從 focal (20.04) 後都是 4.4.1,看起來是因為上游 Debian 一直沒更新?在「Debian -- Package Search Results -- gradle」這邊也看得到是 4.4.1。

而從 GitHub 上翻,可以發現 4.4.1 是 2017 年出的版本了。

短時間看起來沒解,所以就得找方法繞開... 官網上的「Installation」有提到可以透過 SDKMAN!,但我就馬上想到 mise 說不定可以?

在 mise 的 registry.toml 裡面可以看到目前支援的項目,包括了 asdf 社群的資源,可以看到有 gradle 的設定,看起來是有支援的:

gradle = ["asdf:rfrancis/asdf-gradle", "vfox:version-fox/vfox-gradle"]

直接裝起來就收工了:

mise use -g gradle@8

話說看到不少有趣的東西,像是三個雲的 cli 指令:

awscli = ["asdf:MetricMike/asdf-awscli"]
azure-cli = ["asdf:EcoMind/asdf-azure-cli"]
gcloud = ["asdf:jthegedus/asdf-gcloud"]

算是個選擇...?

mise + cron 的組合問題

mise + cron 環境時會遇到「User's bash PATH doesn't seems to be updated in non-interactive session? #2382」這邊的問題,在 cron 跑起來的 shell script 裡面雖然有請 mise 初始化環境,但會發現應用程式沒有指到對應的地方。

目前的 workaround 是增加 --shims,這個指令是目前官方文件有直接一個章節列出來的,也許算是比較穩定的 workaround:「Shims」,裡面有提到:

mise activate --shims is a shorthand for adding the shims directory to PATH.

雖然是 workaround,但算是還可以接受的...

來試著用 mise

應該是前幾天在 Mastodon 上看到 (但找不到了) 有人提到 mise 這個套件,可以不用每個程式語言都裝各自的 version manager (以 Node.js 這邊的話就像是 nvmfnm 的東西),剛剛先開個獨立的 user 丟進去測,測試的情況還可以接受,就換起來用看看...

官網提供的安裝方式有不少選項可以選,除了 ... | bash 的方法以外,還有自己抓 binary 下來,丟到任何可以跑的目錄下,或是透過 apt 安裝與更新。

有了 mise 後,接著把這段 code 放到每次 login 執行的地方:(PS:裡面 bash 的欄位也可以改成 zsh)

if command -v mise > /dev/null; then
    eval "$(mise activate bash)"
fi

然後重新登入讓他生效,接著就是裝一堆東西,參數可以自己用 --help 看說明:

mise ls
mise use -g go
mise use java@11
mise use java@17
mise use -g java@lts
mise use node@16
mise use node@18
mise use -g node@lts
mise use -g perl
mise use -g python@3.12
mise use -g ruby
mise use -g rust

在裝的時候發現有些是吃 asdf 社群的資源。

另外一個我自己很需要的功能是支援 .nvmrc 切版本的功能,切進目錄後用 node -v 會看到版本切過去了。